如何在Java中实现==运算符?

Vin*_*lds 9 java jvm

具体来说,在对象引用相等的情况下,==运算符会做什么?

如果引用在比较时计算到同一个对象地址,那么比较是否返回true?或者它是否利用两个引用的hashCode值来确定对象是否相同?

在这里非常具体,我想知道由==操作引用JVM管理的数据结构以进行参考比较.==依靠OOP进行参考比较?

不幸的是,JLS没有定义==运算符必须如何工作.Java API文档没有提到==应该做什么(它们是针对类的,对吗?)

PS:我对这个关于哈希码唯一性的问题有点兴趣,并且更愿意知道Sun JVM(或OpenJDK)如何实现==运算符.

Ree*_*sey 10

==运算符只是比较引用.

JVM中的引用只是一个标准的对象指针.这适用于单个32位或64位整数值(取决于平台).

当你比较两个对象引用时,你真的只是比较两个32位或64位整数,如果它们是相同的,你将等于相等.整数值是内存中的位置.

  • 我终于明白了.==操作转换为字节码中的if_acmpne指令; 在执行期间,这会从操作数堆栈中弹出对象引用并进行比较.我仍然没有弄清楚如何获得引用.但那可以等待. (3认同)