我试图了解该hashCode()
方法的本机实现。这个方法到底返回了什么?它是内存地址还是随机值?
问问题
3931 次
3 回答
40
.hashCode()
本机实现依赖于 JVM。
例如 HotSpot 有 6 个Object.hashCode()
实现。您可以-XX:hashCode=n
通过命令行使用运行 JVM 的标志来选择它,其中 n:
0 – Park-Miller RNG(默认)
1 – f(address, global_statement)
2 – 常量 1
3 – 串行计数器
4 – 对象地址
5 – 线程局部 Xorshift
于 2013-04-19T13:33:36.903 回答
22
从文档中:
在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 Java TM编程语言不需要这种实现技术。)
所以它可能与内存地址有关,但不一定是 - 而且您绝对不应该对它与内存有关的任何假设。
您对哈希码所做的任何事情都不应该关心这一点。您应该从哈希码中推断出的唯一内容是:
- 如果两个对象的哈希码相同,它们可能是相等的对象
- 如果两个对象的哈希码不同,则它们不是相等的对象(假设一个正确的实现,无论是否被覆盖)
于 2013-04-19T13:11:27.373 回答
3
你的答案就在这里。如文档中所述:
在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 Java TM编程语言不需要这种实现技术。)
于 2013-04-19T13:13:26.410 回答