java - 当对象数量超过 `int` 所能容纳的数量时,身份哈希码会发生什么情况?

标签 java memory jvm hashcode

以这种方式调用方法System.identityHashCode(...),因为它识别对象,因此两个不同的对象不能具有相同的身份哈希码,对吗?

它返回一个int。但是,在具有大量 RAM 的系统上,当对象数量超过整数范围 2^32 时会发生什么?

在不重写 equals 的类上进行操作时,HashMapHashSet 不会有问题吗>哈希码

编辑:
如果 int 还不够,我可以为对象获取一些真正的唯一 ID 吗?

最佳答案

不,这只是正常的哈希冲突。允许两个不相等的对象返回相同的哈希值 - 只是需要比较它们是否相等。

这并不限于身份哈希码 - 考虑String.hashCode()。显然,可能的字符串比 int 值多,因此必须至少有一个哈希值,该值是多个字符串哈希的结果。 HashMap/HashSet 首先使用哈希码来快速将可能匹配的范围缩小到具有相同哈希码的条目,然后调用 依次对每个条目执行 equals() ,直到找到匹配项或确定没有任何条目等于给定的键。

关于java - 当对象数量超过 `int` 所能容纳的数量时,身份哈希码会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324749/

相关文章:

java - MockitoInvocationHandler 类的 NoClassDefFoundError

memory - Haskell 堆栈溢出

memory - 如何在lazy_static 中释放内存?

Java 在 CMD 中运行,但不在 Powershell 中运行

java - 方法引用 lambda 中的显式类型提示导致原始类型

java - StringTemplate4 和匿名模板

Java 程序不一定从 main() 开始,对吧?

java - Cassandra - JVM OOM 直接缓冲区错误

java - Java ImageIO.read() 中的内存泄漏

c++ - 内联结构声明的大小