目前我深入研究了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
。任何人都可以给出更多推理吗?提前致谢
请注意!这个问题对为什么具有相同哈希码的两个对象不一定等于
更感兴趣答案 0 :(得分:0)
这是一个简单的计算问题。哈希码是一个整数,因此有32位。现在以Long
为例。由于它是64位长,因此存在比2 32 更多的值。因此,必须有许多具有相同哈希码的值。