預設 Object.equals() 比較「參考相等」(同一物件)。值類別如 Integer、String 覆寫為「值相等」。何時需自行覆寫?
equals()| 契約 | 定義 | 程式碼表達 |
|---|---|---|
| 自反性 | 物件必須等於自己 | x.equals(x) == true |
| 對稱性 | 雙向一致 | x.equals(y) == y.equals(x) |
| 傳遞性 | 鏈式傳遞 | x.equals(y) && y.equals(z) → x.equals(z) |
| 一致性 | 多次呼叫結果不變 | 未修改物件狀態前提下 |
| 非空性 | 不等於 null | x.equals(null) == false |
if (this == obj) return true;if (!(obj instanceof MyClass)) return false;(同時處理 null)MyClass other = (MyClass) obj;==,物件參考用 equals(),陣列用 Arrays.equals(),float/double 用 Float.compare()/Double.compare()違反會導致物件在 HashMap、HashSet 等雜湊容器中行為錯誤(下一篇將詳細說明)。
【matrix 原創】轉載請註明來源:www.matrix.org.cn