后端的
Object.hashCode()和
System.identityHashCode()如何工作?
假设尚未覆盖,则该
Object.hashCode()方法只需调用即可
System.identityHashCode(this)。
的确切行为
System.identityHashCode(Object)取决于JVM实现。(在最近的Hotspot JVM上的实际实现是相当聪明的,但是我离题了。)
是否
identityHashCode()返回对象的引用?
否。它返回int,而an int不能保存引用。
返回的整数
identityHashCode可能与对象的(a)机器地址有关,或者可能不是1。
identityHashCode()保证返回的值在对象的生存期内不会改变。这意味着,如果GC(在
identityHashCode()调用之后)重定位对象,则它不能使用新的对象地址作为身份哈希码。
hashCode()是否取决于?对象? ==运算符的后端工作方式。
这没有道理。Java中没有
? ==或
?==运算符。
hashCode()和identityHashCode()有什么区别?
以上已部分解释。其他差异包括:
该
hashpre()
方法是非最终实例方法,并且在覆盖的任何类中都应覆盖此equals(Object)
方法。相反,identityHashCode(Object)
是一种static
方法,因此不能被覆盖。该
identityHashCode(Object)
方法为你提供了一个对象的标识符,该标识符在理论上可以用于哈希和哈希表以外的其他用途。(不幸的是,它不是一个独特的标识符,但被保证为对象的生命周期永远不会改变。)



