Java hashCode()和identityHashCode()在后端如何工作?

问题描述

后端的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()有什么区别?

以上已部分解释。其他差异包括

  • hashcode()方法是非最终实例方法,并且在覆盖的任何类中都应覆盖此equals(Object)方法。相反,identityHashCode(Object)是一种static方法,因此不能被覆盖。

  • identityHashCode(Object)方法为你提供了一个对象的标识符,该标识符在理论上可以用于哈希和哈希表以外的其他用途。(不幸的是,它不是一个独特的标识符,但被保证为对象的生命周期永远不会改变。)

解决方法

如何做Object.hashCode()System.identityHashCode()工作在后端?是否identityHashCode()返回对象的引用?是否hashCode()取决于?对象的?==操作员如何在后端工作。

hashCode()和之间有什么区别identityHashCode()

相关文章

猜你在找的编程问答相关文章

怎样才能让 Git“忘记”一个被跟踪但现在在 .gitignore 中的文件?
Python 中的metaclasses是什么?
如何在 Linux 上查找包含特定文本的所有文件?
如何从异步调用返回响应
如何在一个表达式中合并两个字典(取字典的并集)?
HTTP 中的 POST 和 PUT 有什么区别?
使用 Git 将最近的提交移动到新分支
在 JavaScript 比较中应该使用哪个等于运算符 (== vs ===)?