equals和hashCode之间的关系是什么?

时间:2014-05-13 04:39:05

标签: java equals hashcode

问题:如果o1和o2有两个对象o1.equals(o2),那么关于o1.hashCode()== o2.hashCode()之间关系的java标准约定是什么?

答案:o1.hashCode()== o2.hashCode()

我不知道为什么......我认为是因为o1和o2是不同的对象,所以它们不应该具有相同的hashCode。如果问题是o1 == o2,那么我会说他们有相同的hashCode,因为o1和o2都指向同一个对象。

有谁可以指出我做错了什么?

2 个答案:

答案 0 :(得分:1)

.equals用于评估对象的值。对象进行哈希处理时,系统级别的数值将用于生成哈希码(如果愿意,则为整数)。如果对象完全相同(例如,在属性方面),它们将具有相同的数字序列,因此散列到相同的值。

答案 1 :(得分:0)

Equals和Hashcode总是齐头并进。如果o1 == o2,那么它们指向相同的内存,并且哈希码非常平等。但是,如果你实现了Equals,你必须确保当Equals返回true时,Hashcode必须返回相同的值。

以下是official docs,其中列出了要求/标准。