JVM如何确保System.identityHashCode()永远不会改变?
通常情况下,Object.hashCode()
的默认实现是根据对象在内存中的分配地址计算出来的某个值(尽管这在JLS中并没有规定)。鉴于虚拟机会在内存中移动对象,为什么在对象的生命周期中,System.identityHashCode()
返回的值永远不会改变呢?
如果它是一个“一次性”计算(对象的hashCode
只计算一次并存储在对象头中),那么这是否意味着两个对象可能具有相同的identityHashCode
(如果它们恰好在内存中的相同地址上首次分配)?