何時須要重寫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