为什么具有相同哈希码的两个对象不一定相等?
Why two objects with the same hashcode are not necessarily equals?
目前我钻研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
。根据JavaAPI(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Hashtable.java)的HashTable源码,例如参考第254行,我们几乎可以得出equals => same hashcode
,但我仍然不能完全理解为什么two objects with the same hashcode are not necessarily equals
。任何人都可以对此给出更多推理吗?提前致谢
注意!这个问题比较感兴趣的是为什么两个哈希码相同的对象不一定相等
这是一个简单的数数问题。哈希码是一个整数,所以有 32 位。现在以 Long
为例。由于它是 64 位长,因此值比 232 多得多。因此必须有很多值具有相同的哈希码。
目前我钻研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
。根据JavaAPI(http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Hashtable.java)的HashTable源码,例如参考第254行,我们几乎可以得出equals => same hashcode
,但我仍然不能完全理解为什么two objects with the same hashcode are not necessarily equals
。任何人都可以对此给出更多推理吗?提前致谢
注意!这个问题比较感兴趣的是为什么两个哈希码相同的对象不一定相等
这是一个简单的数数问题。哈希码是一个整数,所以有 32 位。现在以 Long
为例。由于它是 64 位长,因此值比 232 多得多。因此必须有很多值具有相同的哈希码。