根据Object.hashCode()
的JavaDoc,此方法返回将其转换为整数值的对象的内部地址。
但垃圾收集器可以将对象从一个内存段移动到另一个内存段,从而更改内部地址。例如,对象可以从Young Generation
移动到Old Generation
。
例如,请参阅java.exe的以下命令行键:
-XX:+ UseSerialGC
-XX:+ UseParallelGC
-XX:+ UseParallelOldGC
-XX:+ UseConcMarkSweepGC
他们确定垃圾收集的不同算法。
这是否意味着在这种情况下Object.hashCode()
将返回不同的值?
或者它总会返回对应于对象初始地址的值?
答案 0 :(得分:0)
直接从javadoc
hashCode的一般合约是:
•每当在同一个对象上多次调用它时 执行Java应用程序时,hashCode方法必须始终如一 返回相同的整数,前提是equals中没有使用的信息 对象的比较被修改。不需要保留该整数 从一个应用程序的执行到另一个执行的一致性 相同的申请。