為什么要重寫equals()方法?


因為默認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方法。
————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM