首页 > 代码库 > 重写equals()和hashCode()
重写equals()和hashCode()
什么时候需要重写equals()?
只有当一个实例等于它本身的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相 等。而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的情况下, 如果超类也没有重写equals()以实现期望的行为,这时我们就需要重写equals方法。
下面看一个简单示例,我们需要一系列的orderElement对象,但是当propertyName已经有的情况下,我们就不在需要,那么其实我们在比较两个对象的时候只需要知道他们的property值是否相等就可以了:
1 public class OrderElement { 2 3 public OrderElement() { 4 } 5 6 public OrderElement(Integer orderNo, String propertyName, boolean isAsc) { 7 this.orderNo = orderNo; 8 this.propertyName = propertyName; 9 this.isAsc = isAsc;10 }11 12 private Integer orderNo;13 private String propertyName;// 排序属性14 private boolean isAsc;// 是否正序15 16 public Integer getOrderNo() {17 return orderNo;18 }19 20 public void setOrderNo(Integer orderNo) {21 this.orderNo = orderNo;22 }23 24 public String getPropertyName() {25 return this.propertyName;26 }27 28 public void setPropertyName(String propertyName) {29 this.propertyName = propertyName;30 }31 32 public boolean getIsAsc() {33 return this.isAsc;34 }35 36 public void setAsc(boolean isAsc) {37 this.isAsc = isAsc;38 }39 40 @Override41 public boolean equals(Object obj) {42 if (obj == null || !this.getClass().getName().equals(obj.getClass().getName()))43 return false;44 OrderElement e = OrderElement.class.cast(obj);45 if (getPropertyName() != null && e.getPropertyName() != null && getPropertyName().equals(e.getPropertyName()))46 return true;47 return super.equals(obj);48 }49 50 @Override51 public int hashCode() {52 if (getPropertyName() != null) {53 return getPropertyName().hashCode();54 }55 return super.hashCode();56 }57 }
这个应用非常常用,有需要的话我们都应该在自己的类中重写这两个方法!
重写equals()和hashCode()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。