可能重复:
In Java, why must equals() and hashCode() be consistent?
Why hashCode() can return the same value for different objects in java?
在JAVA API中,我们可以看到
如果两个物体不相等 等于,他们不是必须的 返回不同的hashCode值。
为什么会这样?
如果两个对象根据equals不相等,那么应该要求它返回不同的hashCode值吗?
答案 0 :(得分:9)
散列码是AFAIR的32位整数,因此许多状态限制为2 ^ 32。您创建的几乎每个类都会有更多可能的状态,因此无法确保不同的对象不会具有相同的哈希码值。
哈希码的不等意味着对象不相等,但哈希码的相等意味着对象可能相等。
答案 1 :(得分:0)
原因主要是因为hashCode与Equals代码不同。这就是为什么你有equals()。
hascode可以(并且会)发生碰撞。你有一些信息值得X位,但你用一个小于X位的哈希编码(在这里切一些角)。因此,一些重复项必须可用于不相等的对象。
答案 2 :(得分:0)
他们不需要返回不同的哈希码,但如果他们这样做,所有与哈希相关的Java算法都会表现得更好,因为哈希冲突会更少。