运算符是对常量或者变量进行操作的符号,Java的运算符有六类:算术运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符,三元运算符
逻辑运算符的作用是把各个表达式连接起来组成一个更复杂的逻辑表达式,逻辑表达式的运算结果是boolean类型,要么为true,要么为false
1.逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与 | 可以理解为:并且 |
&& | 短路与 | 作用和&相同,但是有短路效果 |
^ | 异或 | 结果相同为false,不同为true |
! | 逻辑非 | 取反,把true变为false,把false变为true |
符号 作用 说明
| 逻辑或 可以理解为:或者
|| 短路或 作用和|相同,但是有短路效果
2.示例
System.out.println((num1 > num2) & (num3 > num1)); // (10 > 20) 并且 (30 > 10) 结果为 falseSystem.out.println((num1 > num2) && (num3 > num1)); // (10 > 20) 并且 (30 > 10) 结果为 falseSystem.out.println((num1 > num2) | (num3 > num1)); // (10 > 20) 或者 (30 > 10) 结果为 trueSystem.out.println((num1 > num2) || (num3 > num1)); // (10 > 20) 或者 (30 > 10) 结果为 trueSystem.out.println(!(num1 > num2 || num3 > num1)); // (10 > 20 或者 30 > 10) 结果为 true, 但是有!的存在,作用是取反。把原本的结果true变为falseSystem.out.println(!(num1 > num2 && num3 > num1)); // (10 > 20 并且 30 > 10) 结果为 false,但是有!的存在,作用是取反。把原本的结果false变为trueSystem.out.println((num1 > num2) ^ (num3 > num1)); // (10 > 20) 异或 (30 > 10) 等价于 (false) 异或 (true) 左边为false,右边为true,结果不同。所以最终结果为 trueSystem.out.println((num1 == num1) ^ (num3 == num3)); // (10 == 10) 异或 (30 == 30) 等价于 (true) 异或 (true) 左边为true,右边为true,结果相同。所以最终结果为 false
3.短路效果
逻辑& 与 短路&& 的区别在于是否存在短路效果
逻辑& :左右2个表达式都会参与运算
int num1 = 1;int num2 = 2;System.out.println((++num1 > 2) & (++num2 > 3)); // 逻辑& 左右2个表达式都会参与运算System.out.println(num1); // 2System.out.println(num2); // 3
短路&& :如果左边的表达式结果为false,右边的表达式不会执行,这就是短路效果
int num1 = 1;int num2 = 2;System.out.println((++num1 > 2) && (++num2 > 3)); // 短路&& 左边的表达式为false,右边的表达式不会执行System.out.println(num1); // 2System.out.println(num2); // 2
逻辑| 与 短路|| 的区别在于是否存在短路效果
逻辑| :左右2个表达式都会参与运算
int num1 = 2;int num2 = 3;System.out.println((++num1 > 3) | (++num2 > 4)); // 逻辑| 左右2个表达式都会参与运算System.out.println(num1); // 3System.out.println(num2); // 4
短路|| :如果左边的表达式结果为true,右边的表达式不会执行,这就是短路效果
int num1 = 3;int num2 = 4;System.out.println(((++num1 > 3) || (++num2 > 5))); // 短路|| 左边的表达式为true,右边的表达式不会执行System.out.println(num1); // 4System.out.println(num2); // 4