开发者社区 > 通义灵码 > AI程序员 > 正文

字节码指令输出部分解释错误

字节码指令输出部分解释错误.jpg

错误字节码:
生成 false 并输出
如果两个对象相等,则继续执行:
24: iconst_1:生成整数 1(表示 false)并压入栈顶。
25: goto 29 (+4):无条件跳转到标签 29。
生成 true 并输出

如果两个对象不相等,则跳转到标签 28:
28: iconst_0:生成整数 0(表示 true)并压入栈顶。

正确字节码:

  1. 生成 true 并输出
    • 如果两个对象相等,则继续执行:
    • 24: iconst_1:生成整数 1(表示 true)并压入栈顶。
      • 25: goto 29 (+4):无条件跳转到标签 29
  2. 生成 false 并输出
    • 如果两个对象不相等,则跳转到标签 28
    • 28: iconst_0:生成整数 0(表示 false)并压入栈顶。

完整字节码
0 new #13
3 dup
4 invokespecial #1 : ()V>
7 astore_1
8 new #13
11 dup
12 invokespecial #1 : ()V>
15 astore_2
16 getstatic #4
19 aload_1
20 aload_2
21 if_acmpne 28 (+7)
24 iconst_1
25 goto 29 (+4)
28 iconst_0
29 invokevirtual #5
32 getstatic #4
35 aload_1
36 aload_2
37 if_acmpeq 44 (+7)
40 iconst_1
41 goto 45 (+4)
44 iconst_0
45 invokevirtual #5
48 return

字节码对应的java源码
public void ifCompare3() {
Object obj1 = new Object();
Object obj2 = new Object();
System.out.println(obj1 == obj2);//false
System.out.println(obj1 != obj2);//true
}

展开
收起
1240626498780342 2024-09-13 15:44:07 12 1
0 条回答
写回答
取消 提交回答
问答分类:

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载