整理Effective Java書中Item 10: Obey the general contract when overriding equals心得筆記
主旨
當覆寫 equals()
方法時,必須遵守其一般契約,這是設計 equals()
方法時的基本要求。如果不遵守這些規範,會導致難以預測的錯誤。
劃重點
equals()
方法的一般契約
- 對稱性:如果
a.equals(b)
返回true
,那麼b.equals(a)
也應該返回true
。 - 自反性:對於任何非
null
的參照變數a
,a.equals(a)
必須返回true
。 - 傳遞性:如果
a.equals(b)
返回true
且b.equals(c)
返回true
,那麼a.equals(c)
必須返回true
。 - 一致性:如果兩個物件相等,多次調用
a.equals(b)
應該返回相同的結果,前提是b
沒有改變。 - 對
null
的比較:a.equals(null)
應該返回false
。