概述
我写了这个简单的Test类,看看Java如何评估Bytecode级别的布尔代数:
public class Test {
private static boolean a, b;
public static boolean method1(){
return !(a || b);
}
public static boolean method2(){
return !a && !b;
}
}
如果使用DeMorgan’s Laws简化method1(),应该得到method2()。在查看Bytecode(使用javap -c Test.class)后,它看起来像:
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":
()V
4: return
public static boolean method1();
Code:
0: getstatic #2 // Field a:Z
3: ifne 16
6: getstatic #3 // Field b:Z
9: ifne 16
12: iconst_1
13: goto 17
16: iconst_0
17: ireturn
public static boolean method2();
Code:
0: getstatic #2 // Field a:Z
3: ifne 16
6: getstatic #3 // Field b:Z
9: ifne 16
12: iconst_1
13: goto 17
16: iconst_0
17: ireturn
}
所以我的问题是,为什么在字节码级别的method1()和method2()完全一样?
最后
以上就是魁梧老鼠为你收集整理的java method 字节_java – 为什么在字节码级别的method1和method2相同?的全部内容,希望文章能够帮你解决java method 字节_java – 为什么在字节码级别的method1和method2相同?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复