不覆蓋equals的情況
1)類的每個例項本質上是唯一的;
2)不關心類是否提供了「邏輯想等」的測試功能;
3)超類已經覆蓋了equals,從超類繼承過來的行為對於子類也是合適的;
4)類是私有的或包級私有的,可以確定他的equals方法永遠不會被呼叫。
應該覆蓋equals的情況
如果類具有自己特有的「邏輯想等」概念,而且超類還沒有覆蓋equals以實現期望的行為,這時我們就需要覆蓋equals方法。這通常屬於「值類」的情形。
equals 方法在非空物件引用上實現相等關係
l自反性:對於任何非空引用值 x,x.equals(x) 都應返回 true。
l對稱性:對於任何非空引用值 x 和y,當且僅當 y.equals(x) 返回 true 時,x.equals(y) 才應返回 true。
l傳遞性:對於任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,並且 y.equals(z) 返回 true,那麼 x.equals(z) 應返回 true。
l一致性:對於任何非空引用值 x 和y,多次呼叫 x.equals(y) 始終返回 true 或始終返回 false,前提是物件上 equals 比較中所用的資訊沒有被修改。
l對於任何非空引用值 x,x.equals(null) 都應返回 false。
實現高質量equals方法的訣竅
1)使用==操作符檢查「引數是否為這個物件的引用」;
2)使用instanceof操作符檢查「引數是否為正確的型別」;
3)把引數轉換成正確的型別;
4)對於該類中的每個「關鍵」域,檢查引數中的域是否與該物件中對應的域相匹配(為了獲得最佳效能,應該先比較最有可能不一致的域,或者開銷最低的域,最理想的情況是兩個條件同時滿足的域);
5)當編寫完equals方法後,應該問自己三個問題:它是否是對稱的、傳遞的和一致的?
java中 和 equal區別
明確概念 物件的引用 當用類建立乙個物件時,類中的成員變數被分配記憶體空間,這些記憶體空間稱為該物件的實體,而物件中存放著引用 位址 以確保該實體由該物件操作使用。一 比較物件為基本資料型別 byte,short,char,int,long,float,double,boolean 比較兩個基本資料...
Java學習之Object類的equals 方法
喵喵喵 小北今天想把object類中的equals 方法想給大家更詳細的解釋一下下咯 首先equals 方法在預設的情況下比較的是物件的引用是否相同 源 public boolean equals object obj 其實呢string這個時候已經被重寫過了 因此輸出的結果就是 true 那麼如何...
JAVA學習筆記 隱藏和覆蓋 續
1 屬性的隱藏 子類中宣告了與父類中相同的成員變數名,則從父類繼承的變數將被隱藏 子類擁有了兩個相同名字的變數,乙個繼承自父類,另乙個由自己宣告 當子類執行繼承自父類的操作時,處理的是繼承自父類的變數,而當子類執行它自己宣告的方法時,所操作的就是它自己宣告的變數 2 如何訪問被隱藏的父類屬性 呼叫從...