首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Effective Java 學習筆記(七):正確覆寫 equals() 方法的五大契約與實作要點

     編輯:Java 程式設計入門

equals() 核心語義

預設 Object.equals() 比較「參考相等」(同一物件)。值類別如 Integer、String 覆寫為「值相等」。何時需自行覆寫?

  • 類別有特定「邏輯相等」定義
  • 父類別未覆寫 equals()
  • 非「類型安全的列舉模式」(Enum 類別不需覆寫)

覆寫必須遵守的五大契約

契約定義程式碼表達
自反性物件必須等於自己x.equals(x) == true
對稱性雙向一致x.equals(y) == y.equals(x)
傳遞性鏈式傳遞x.equals(y) && y.equals(z) → x.equals(z)
一致性多次呼叫結果不變未修改物件狀態前提下
非空性不等於 nullx.equals(null) == false

高品質 equals() 實作四步驟

  1. == 檢查同一參考:效能優化,if (this == obj) return true;
  2. instanceof 檢查型別:if (!(obj instanceof MyClass)) return false;(同時處理 null)
  3. 轉型:MyClass other = (MyClass) obj;
  4. 逐一比較關鍵欄位:基本型別用 ==,物件參考用 equals(),陣列用 Arrays.equals(),float/double 用 Float.compare()/Double.compare()

鐵律:覆寫 equals() 必須同步覆寫 hashCode()

違反會導致物件在 HashMap、HashSet 等雜湊容器中行為錯誤(下一篇將詳細說明)。

【matrix 原創】轉載請註明來源:www.matrix.org.cn

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved