作者peanut97 (花生)
看板java
标题Re: [问题] 一题SCJP的题目,有关equals()&hashcod()
时间Wed Dec 7 13:24:10 2011
我不是高手,
我觉得可以参考一下良葛格笔记《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