一 介绍
用于连接多个条件( 多个关系表达式) , 最终的结果也是一个 boolean 值。
&
:逻辑与&&
:短路与|
:逻辑或||
:短路或!
取反^
:异或
二 逻辑运算规则
a&b
:&
叫逻辑与: 规则: 当 a 和 b 同时为 true ,则结果为 true, 否则为 falsea&&b
:&&
叫短路与: 规则: 当 a 和 b 同时为 true ,则结果为 true,否则为 falsea|b
:|
叫逻辑或, 规则: 当 a 和 b , 有一个为 true ,则结果为 true,否则为 falsea||b
:||
叫短路或, 规则: 当 a 和 b , 有一个为 true ,则结果为 true,否则为 false!a
:!
叫取反, 或者非运算。 当 a 为 true, 则结果为 false, 当 a 为 false 是, 结果为 truea^b:
^
叫逻辑异或, 当 a 和 b 不同时, 则结果为 true, 否则为 false
三 && 和 & 规则/使用
条件1 && 条件2
两个条件都为 true, 结果为 true,否则 false
条件1 & 条件2
两个条件都为 true, 结果为 true,否则 false
代码演示
public static void main (String[] args) {// 演示 && 和 & 的使用区别// && 短路与int age = 50;if (age > 20 && age < 90){System.out.println("ok100");}// & 逻辑与if (age > 20 & age < 90){System.out.println("ok200");}// 区别int a = 4;int b = 9;// 短路与,第一个条件为false,后面的条件不再执行
// if(a < 1 && ++b < 50){
// System.out.println("ok300");
// }// 逻辑与,第一个条件为false,后面的条件依然会进行判断if(a < 1 & ++b < 50){System.out.println("ok300");}System.out.println("a=" +a + " b="+b);
}
- &&短路与: 如果第一个条件为 false, 则第二个条件不会判断, 最终结果为 false, 效率高
- & 逻辑与: 不管第一个条件是否为 false, 第二个条件都要判断, 效率低
四 || 和 | 规则/使用
条件1 || 条件2
两个条件中只要有一个成立, 结果为 true,否则为 false
条件1 | 条件2
只要有一个条件成立, 结果为 true,否则为 false
代码演示
public static void main (String[] args) {// 演示 || 和 | 的使用区别// || 短路或int age = 50;if (age > 20 || age < 30){System.out.println("ok100");}// | 逻辑或if (age > 20 | age < 30){System.out.println("ok200");}// 区别int a = 4;int b = 9;// 短路或,第一个条件为true,后面的条件不再执行。最终结果为true,效率高
// if(a < 10 || ++b < 50){
// System.out.println("ok300");
// }// 逻辑或,第一个条件为true,后面的条件依然会进行判断if(a < 10 | ++b < 50){System.out.println("ok300");}System.out.println("a=" +a + " b="+b);
}
- ||短路或: 如果第一个条件为 true, 则第二个条件不会判断, 最终结果为 true, 效率高
- | 逻辑或: 不管第一个条件是否为 true, 第二个条件都要判断, 效率低
测试代码
public static void main (String[] args) {int x = 5;int y = 5;
// if(x++ == 6 & ++y == 6){ // x++ 先比较,再自增,所以 x++ == 6为false,逻辑与后续继续执行
// x =11;
// }// if(x++ == 6 && ++y == 6){ // x++ 先比较,再自增,所以 x++ == 6为false。短路与后续不执行
// x =11;
// }// if(x++ == 5 | ++y == 5){ // x++ 先比较,再自增,所以 x++ == 5为true,逻辑或后续执行
// x =11;
// }if(x++ == 5 || ++y == 5){ // x++ 先比较,再自增,所以 x++ == 5为true,短路或后续不执行x =11;}System.out.println("x="+x +",y="+y);System.out.println("=======================");boolean a = true;boolean b = false;short z = 46;if((z++ == 46) && (b = true)) { // z++ == 46 ,先判断,后自增为 47 ; b = true 是赋值,不是判断相等z++; // z= 48}System.out.println("z="+z);if ((a = false) || (++z == 49)) { // z= 49z++; // z = 50}System.out.println("z="+z);}
五 !取反 和 ^异或 的规则/使用
!条件
: 如果条件本身成立, 结果为 false, 否则为 true
a^b
: 叫逻辑异或, 当 a 和 b 不同时, 则结果为 true, 否则为 false
代码演示
public static void main (String[] args) {// ! 操作是取反System.out.println(90 > 20);System.out.println(!(90 > 20));// a^b 逻辑异或,当 a 和 b 不同时,则结果为true,否则为falseboolean flag = (10 > 1 ) ^ (3 > 5);System.out.println("flag="+flag);}