hashCode() 方法中对象的内部地址



根据Object.hashCode()的JavaDoc,此方法返回将其转换为整数值的对象的内部地址。

但是垃圾回收器可以将对象从一个内存段移动到另一个内存段,从而更改其内部地址。例如,可以将对象从Young Generation移动到Old Generation

例如,请参阅 java 的以下命令行键.exe:

-XX:+使用串行GC

-XX:+使用并行GC

-XX:+使用并行旧GC

-XX:+使用ConcMarkSweepGC

它们确定垃圾回收的不同算法。

这是否意味着在这种情况下Object.hashCode()将返回不同的值?

或者它将始终返回与对象的初始地址对应的值?

直接来自javadoc

哈希代码的一般合约是:

•每当在 执行 Java 应用程序时,hashCode 方法必须一致 返回相同的整数,前提是 equals 中未使用任何信息 修改对象的比较。此整数不需要保留 从应用程序的一次执行到另一个执行的一致性 同一应用程序。

最新更新