因為默認equals在比較兩個對象時,是看他們是否指向同一個地址的。但有時,我們需要兩個不同對象只要是某些屬性相同就認為它們equals()的結果為true。比如:
person p1?= new person(1,"name");
person p2 = new person(1,"name");
如果不重寫equals的話,他們是不相同的,所以我們要重些equals,判斷只要他們的id和名字相同equals就為true,在一些集合里有時也這樣用,集合里的contain也是用equals來比較
?
先來看Object關於equals()的源碼:
public boolean equals(Object obj) {
return (this == obj);
}
?
重寫需要注意的屬性:
equals方法實現了一個等價關系(equivalence relation)。它有以下這些屬性:
? 自反性:對於任何非空引用x,x.equals(x)必須返回true。
? 對稱性:對於任何非空引用x和y,如果且僅當y.equals(http://www.amjmh.com/v/BIBRGZ_558768/)返回true時x.equals(y)必須返回true。
? 傳遞性:對於任何非空引用x、y、z,如果x.equals(y)返回true,y.equals(z)返回true,則x.equals(z)必須返回true。
? 一致性:對於任何非空引用x和y,如果在equals比較中使用的信息沒有修改,則x.equals(y)的多次調用必須始終返回true或始終返回false。
? 非空性: 對於任何非空引用x,x.equals(null)必須返回false。
當重寫equals方法時,同時也要重寫hashCode方法。
————————————————