Re: [問題] 一題SCJP的題目,有關equals()&hashcod()
我不是高手,
我覺得可以參考一下良葛格筆記《Object 類別》這篇:
http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/ObjectClass.htm
以下是上面網址的節錄:
Object的toString()方法預設會傳回以下的字串:
getClass().getName() + '@' +
Integer.toHexString(hashCode());
API中對於equals()的合約是必須具備反身性(Reflexive)、對稱性(Symmetric)、傳
遞性(Transitive)、一致性(Consistent)。
反身性(Reflexive):x.equals(x)的結果要是true。
對稱性(Symmetric):x.equals(y)與y.equals(x)的結果必須相同。
傳遞性(Transitive):x.equals(y)、y.equals(z)的結果都是true,則
x.equals(z)的結果也必須是true。
一致性(Consistent):同一個執行期間,對x.equals(y)的多次呼叫,結果必須相
同。
可以參考API文件中Object類別的hashCode()之建議:
在同一個應用程式執行期間,對同一物件呼叫 hashCode()方法,必須回傳相同的
整數結果。
如果兩個物件使用equals(Object)測試結果為相等, 則這兩個物件呼叫hashCode()時
,必須獲得相同的整數結果。
如果兩個物件使用equals(Object)測試結果為不相等, 則這兩個物件呼叫hashCode()
時,可以獲得不同的整數結果。
兩個不同的物件,可以傳回相同的hashCode()結果,這是合法甚至適當的,只是物件會被
丟到同一個雜湊桶中。 黃色是上一篇版友講的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.69.9
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):