何时须要重写equals()?
ide
只有当一个实例等于它自己的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也能够称作是否实例相 等。而咱们在使用equals()来比较两个指向值对象的引用的时候,每每但愿知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的状况下, 若是超类也没有重写equals()以实现指望的行为,这时咱们就须要重写equals方法。this
下面看一个简单示例,咱们须要一系列的orderElement对象,可是当propertyName已经有的状况下,咱们就不在须要,那么其实咱们在比较两个对象的时候只须要知道他们的property值是否相等就能够了:spa
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 @Override 41 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 @Override 51 public int hashCode() { 52 if (getPropertyName() != null) { 53 return getPropertyName().hashCode(); 54 } 55 return super.hashCode(); 56 } 57 }
这个应用很是经常使用,有须要的话咱们都应该在本身的类中重写这两个方法!code