java布尔值进行and和or逻辑运算原理
先看看如下代码:
public class Test { public static void test() { boolean a = true; boolean b = false; if (a | b) { System.out.println("|"); } if (a & b) { System.out.println("&"); } } public static void main(String[] args){ test(); } }
输出: |
| 和 &运算符是 or和and逻辑运算
1 | 0 == 1
1 & 0 == 0
我们来看一下test方法的字节码
0: iconst_1 1: istore_0 2: iconst_0 3: istore_1 4: iload_0 5: iload_1 6: ior 7: ifeq 18 10: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 13: ldc #3 // String | 15: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 18: iload_0 19: iload_1 20: iand 21: ifeq 32 24: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 27: ldc #5 // String & 29: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 32: return
我们注意0-3的字节码
0:将常量1入栈
1:将1赋值给第一个变量(a)
2:将常量0入栈
3:将0赋值给第二个变量(b)
所以布尔值的逻辑运算就是整型01的逻辑运算
7:ifeq 18 表示
if()里面判断的是逻辑运算的结果是否等于0,如果等于0,则跳过括号内的代码进行下面的代码.