2013-05-09 117 views
-1

在Java中重寫hashCode()時,是否應該覆蓋equals(Object)方法?在Java中重寫hashCode()時應該重寫'equals'(Object)方法嗎?

我已閱讀合同覆蓋equals,您應覆蓋hashCode。反之亦然是真的嗎?

我正在考慮一個場景,我不比較對象,沒有等於方法。

+1

簡單的回答:是的。詳細的答案:檢查可能的重複。 – 2013-05-09 17:11:36

+0

這不是重複的,有特殊意圖的要求 – abhi 2013-05-09 17:16:34

+0

如果你理解了這個概念,那麼你就會知道答案。既然你不理解它,你必須再次閱讀這個概念。順便說一下,從副本Q/A:*如果你重寫一個,那麼你應該重寫另一個。*你有你的答案。 – 2013-05-09 17:17:14

回答

5

是的,它應該被覆蓋。如果您認爲您需要覆蓋hashCode(),那麼您需要覆蓋equals(),反之亦然。的hashCode()常規協定是:

  1. 每當它是一個Java應用程序的執行期間,在同一對象不止一次調用,hashCode方法必須一致地返回相同的整數,沒有提供所用的信息equals比較對象被修改。該整數不需要從應用程序的一次執行到同一應用程序的另一次執行保持一致。

  2. 如果兩個對象根據equals(Object)方法相等,則對兩個對象中的每個對象調用hashCode方法必須產生相同的整數結果。

  3. 不要求,如果兩個對象根據equals不相等(java.lang.Object)方法,然後調用在每個兩個對象的hashCode方法必須產生不同的整數結果。但是,程序員應該意識到,爲不相等的對象生成不同的整數結果可能會提高哈希表的性能。

1

約書亞布洛赫在他的「有效的Java」第3章中講清楚 - 這些必須是同步的。他們應該總是一起被覆蓋。

相關問題