hashCode()如何实现?
我的假设是它将对象存储位置用作运行哈希函数的初始数字(种子)。然而,这种情况并非如此。
我还研究了Hash:它在内部如何工作?但它不能回答我的问题。
是的,我可以下载SDK,但是在执行此操作并查看代码之前,也许其他人已经知道了。
谢谢 :)
编辑: 我知道它应该被覆盖等等,所以请尝试保持话题:)
当然,它是特定于实现的,但是通常,对象的哈希码将被延迟计算并存储在对象头中。标头可以使它们变小,同时允许复杂的锁定算法,这很奇怪。
在OpenJDK / Oracle JVM中,计算初始哈希码的常用方法是基于第一个请求时的内存地址。对象在内存中移动,因此每次使用地址都不是一个好选择。哈希码不是实际的地址- 通常为8的倍数,对于在哈希表中直接使用哈希表(尤其是具有2的幂)而言,这不是很好。注意身份哈希码不是唯一的。
HotSpot具有构建时间选项,可以始终使用零或使用安全随机数生成器(SRNG)进行测试。