为什么具有相同哈希码的两个对象不一定等于?

时间:2016-10-12 17:02:59

标签: java hashtable equals hashcode

目前我深入研究了JSE源代码以获得乐趣。从一些教程中我发现了一个原则two equals objects (i.e. as to object a and b a.equals(b) returns true) must have the same hashcode, on the other hand, two objects with the same hashcode are not necessarily equals。根据Java API的HashTable源代码(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Hashtable.java),例如,参考第254行,我们几乎可以得出equals => same hashcode,但我仍然无法完全理解为什么two objects with the same hashcode are not necessarily equals。任何人都可以给出更多推理吗?提前致谢

请注意!这个问题对为什么具有相同哈希码的两个对象不一定等于

更感兴趣

1 个答案:

答案 0 :(得分:0)

这是一个简单的计算问题。哈希码是一个整数,因此有32位。现在以Long为例。由于它是64位长,因此存在比2 32 更多的值。因此,必须有许多具有相同哈希码的值。