错误字节码:
生成 false 并输出
如果两个对象相等,则继续执行:
24: iconst_1:生成整数 1(表示 false)并压入栈顶。
25: goto 29 (+4):无条件跳转到标签 29。
生成 true 并输出
如果两个对象不相等,则跳转到标签 28:
28: iconst_0:生成整数 0(表示 true)并压入栈顶。
正确字节码:
true
并输出24: iconst_1
:生成整数 1
(表示 true
)并压入栈顶。25: goto 29 (+4)
:无条件跳转到标签 29
。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
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。