&-逻辑与 |-逻辑或 !-逻辑非 &&-短路与 ||-短路或 ^-逻辑异或
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
T | T | T | T | N | N | T | T |
T | N | N | T | N | T | N | T |
N | T | N | T | T | T | N | T |
N | N | N | N | T | N | N | N |
逻辑运算符需要注意的几点:
- java中没有连续型布尔表达式,即不可以写成3<x<6,而要写成x>3&x<6;
- “&”和"&&"的区别:
&:左边无论真假,右边都进行运算;
&&:当左边为真时,右边参与运算;当左边为假时,右边不参与运算;
public class Test{ public static void main(String[] args) { int a = 1; int b = 2; if (a == b && test()){ System.out.println("world"); } } public static boolean test() { System.out.println("hello"); return false; } }
由于a==b为假,所以右边不参与计算,最后什么都不会输出。
public class Test{ public static void main(String[] args) { int a = 1; int b = 2; if (a < b && test()){ System.out.println("world"); } } public static boolean test() { System.out.println("hello"); return false; } }
由于a<b为真,此时右边参与运算,但是右边结果为false,所以整个判断表达式为false,即不会运行到if里面,所以会输出只会hello。
public class Test{ public static void main(String[] args) { int a = 1; int b = 2; if (a == b && test()){ System.out.println("world"); } } public static boolean test() { System.out.println("hello"); return false; } }
由于a<b为真,此时右边参与运算,右边结果也为true,所以整个判断表达式为true,会运行到if里面,所以会输出只会hello wrold。
- “|”和"||"的区别:
|:左边无论真假,右边都进行运算;
||:当左边为真时,右边参与运算;当左边为假时,右边不参与运算; - "^"异或直接理解就是相同则返回false,不同就返回true;