Effective Java 第三章 對於所有對象都通用的方法

第八條:覆蓋equals時請遵守通用約定

Object類中默認的equals如下:

public boolean equals(Object obj) {
  return (this == obj);
}

如果類不覆蓋equals方法,在這種情況下,類的每個實例都只與它自身相等。

  1. 什麼時候不需要覆蓋equals方法
  • 類的每個實例本質上都是唯一的。
  • 不關心類是否提供了“邏輯相等”的測試功能。
  • 超類已經覆蓋了equals,從超類繼承過來的行爲對於子類也是合適的。
  • 類是私有的或是包級私有的,可以確定它的equals方法永遠不會被調用。
  1. 什麼時候需要覆蓋equals方法
    在覆蓋equals方法的時候,必須要遵守它的通用約定:
    equals方法實現了等價關係(equivalence relation):
  • 自反性(reflexive)
  • 對稱性(symmetric)
  • 傳遞性(transitive)
  • 一致性(consistent)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章