通常默认实现Object.hashCode()
是内存中对象分配地址的某个函数(尽管这不是由JLS)。鉴于虚拟机在内存中分流对象,为什么返回的值System.identityHashCode()
在对象的生命周期中永远不会改变?
如果是“一次性”计算(对象的hashCode
被计算一次并隐藏在对象头或其他东西中),那么这是否意味着两个对象可能具有相同的identityHashCode
(如果它们碰巧首先分配在内存中的同一地址)?
现代 JVM 将值保存在对象头中。我相信该值通常仅在第一次使用时计算,以便将对象分配所花费的时间保持在最低限度(有时低至十几个周期)。常见的Sun JVM可以被编译使得所有对象的身份散列码始终为1。
多个对象可以具有相同的身份哈希码。这就是哈希码的本质。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)