根据Object.hashCode()
的JavaDoc,此方法返回将其转换为整数值的对象的内部地址。
但是垃圾回收器可以将对象从一个内存段移动到另一个内存段,从而更改其内部地址。例如,可以将对象从Young Generation
移动到Old Generation
。
例如,请参阅 java 的以下命令行键.exe:
-XX:+使用串行GC
-XX:+使用并行GC
-XX:+使用并行旧GC
-XX:+使用ConcMarkSweepGC
它们确定垃圾回收的不同算法。
这是否意味着在这种情况下Object.hashCode()
将返回不同的值?
或者它将始终返回与对象的初始地址对应的值?
直接来自javadoc
哈希代码的一般合约是:
•每当在 执行 Java 应用程序时,hashCode 方法必须一致 返回相同的整数,前提是 equals 中未使用任何信息 修改对象的比较。此整数不需要保留 从应用程序的一次执行到另一个执行的一致性 同一应用程序。