hashCode() 方法中对象的内部地址
Internal address of the object in hashCode() method
根据 Object.hashCode()
的 JavaDoc,此方法 return 将对象的内部地址转换为整数值。
但是垃圾收集器可以将对象从一个内存段移动到另一个内存段,从而改变它的内部地址。例如,对象可以从 Young Generation
移动到 Old Generation
.
例如,请参阅 java.exe 的以下命令行键:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
它们决定了不同的垃圾收集算法。
这是否意味着在这种情况下 Object.hashCode()
会 return 不同的值?
还是总是return对应对象起始地址的值?
直接来自 javadoc
The general contract of hashCode is:
•Whenever it is invoked on the same object more than once during an
execution of a Java application, the hashCode method must consistently
return the same integer, provided no information used in equals
comparisons on the object is modified. This integer need not remain
consistent from one execution of an application to another execution
of the same application.
根据 Object.hashCode()
的 JavaDoc,此方法 return 将对象的内部地址转换为整数值。
但是垃圾收集器可以将对象从一个内存段移动到另一个内存段,从而改变它的内部地址。例如,对象可以从 Young Generation
移动到 Old Generation
.
例如,请参阅 java.exe 的以下命令行键:
-XX:+UseSerialGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
它们决定了不同的垃圾收集算法。
这是否意味着在这种情况下 Object.hashCode()
会 return 不同的值?
还是总是return对应对象起始地址的值?
直接来自 javadoc
The general contract of hashCode is:
•Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.