Java 重寫 equlas 方法的正確姿勢

重寫 equals 方法約定

  • 任何非null的引用值x,x.equals(null)必須返回false。
  • 自反性:任何非null的引用值,x.equals(x) 必須返回 true。
  • 對稱性:任何非null的引用值 x 和 y,當 x.equals(y) 返回 true 時,y.equals(x) 必須返回 true。
  • 傳遞性:任何非null的引用值 x、y 和 z,如果 x.equals(y) 返回true, y.equals(z) 返回true,那麼 x.equals(z) 必須返回true。
  • 一致性:任何非null的引用值 x 和 y,只要equals方法中用到的屬性沒有被改變,多次調用equals方法應一致的返回true或false。

重寫equals方法的同時還應該重寫hashCode方法

  • 多次調用同一個對象equals方法時,只要equals用到的數值沒用變,hashCode方法必須始終返回同一個值。
  • 如果兩個對象根據 equals(Object )方法比較相等,那麼調用者兩個對象的hashCode必須返回相同的整數。
  • 如果兩個對象根據 equals(Object )方法比較是不相等的,那麼調用這兩個對象
    中的 hashCode 方法,則不一定要求 hashCode 方法必須產生不同的結果 但是程
    序員應該知道,給不相等的對象產生截然不同的整數結果,有可能提高散列表( hashtable )的性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章