Java 比较两个对象时“==”的工作逻辑是什么?

Java 比较两个对象时“==”的工作逻辑是什么?,java,Java,当我们使用“=”比较两个对象时,什么逻辑起作用?这个逻辑写在哪个文件中?仅供参考,我知道JVM会检查两个引用变量是否指向同一个对象;我想知道必须有什么代码来确定两个引用是否指向同一个对象?逻辑写在JVM的源代码中,基本上是比较指针 例如,如果引用相等,if_acmpeq字节码将执行分支跳转。最终这归结为Java虚拟指令集指令,共同描述为if_acmp: 操作 如果引用比较成功,则执行分支 格式 描述 value1和value2都必须是reference类型。它们都从操作数堆栈中弹出并进行比较。比

当我们使用“=”比较两个对象时,什么逻辑起作用?这个逻辑写在哪个文件中?仅供参考,我知道JVM会检查两个引用变量是否指向同一个对象;我想知道必须有什么代码来确定两个引用是否指向同一个对象?

逻辑写在JVM的源代码中,基本上是比较指针


例如,如果引用相等,if_acmpeq字节码将执行分支跳转。

最终这归结为Java虚拟指令集指令,共同描述为if_acmp:

操作

如果引用比较成功,则执行分支

格式

描述

value1和value2都必须是reference类型。它们都从操作数堆栈中弹出并进行比较。比较结果如下:

if_acmpeq成功当且仅当value1=value2

if_acmpne成功当且仅当值1≠ 价值2


如果比较成功,则使用无符号branchbyte1和branchbyte2构造有符号16位偏移量,其中偏移量计算为branchbyte1 Myobj1=新的MyObj;MyObj obj2=obj1;现在obj1==obj2是真的我很好奇你想解决什么现实问题。因此,这不是理论问题,请看。这更多的是概念问题。必须有一个代码来描述“==”的逻辑。我很好奇看到这一点。这不是用C写的,它会使a==直接转换为处理器指令,这反过来意味着逻辑在Intel/AMD/ARM/中的某个地方。。。CPU原理图?所有的东西最终都会转换成处理器指令。从Java源代码到字节码,然后字节码被解释或编译为本机代码。没错,但如果底层架构支持字节码,Java就不能真正做到这一点,Java可以将其传递下去。与之类似,Java依赖==运算符来定义==运算符…Java定义Java字节码,保证有if_acmpeq指令。您可以创建一个解释所有字节码的JVM,即使计算机架构没有这种指令,它也可以运行。 if_acmp branchbyte1 branchbyte2 ..., value1, value2 → ...