我正在尝试理解hashCode()
方法的原生实现。这种方法到底是什么回归?它是一个内存地址还是一个随机值?
答案 0 :(得分:37)
.hashCode()
本机实现依赖于JVM。
E.g。 HotSpot有6个Object.hashCode()
实现。您可以使用-XX:hashCode=n
标志通过命令行运行JVM来选择它,其中n:
0 - Park-Miller RNG(默认)
1 - f(地址,global_statement)
2 - 常数1
3 - 串行计数器
4 - 对象地址
5 - 线程局部Xorshift
答案 1 :(得分:22)
尽可能合理,Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java TM 编程语言不需要此实现技术。)
所以它可能与内存地址有关,但它不一定是 - 你绝对不应该假设它与内存有关。
你对哈希码所做的任何事都不应该关心这一点。您应该从哈希码推断的仅事项是:
答案 2 :(得分:3)
你的答案是here。如文档中所述:
尽可能合理,但Object类定义的hashCode方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但Java TM 编程语言不需要此实现技术。)