“与”操作:全真为真
“或”操作:全假为假
逻辑与 & 和 短路与 &&
使用“与”操作,要求所有表达式的判断结果都是 True 才返回真,其余都返回假
逻辑与 &:所有条件都会进行判断
- 先判断
a > 10
,为 False - 再判断
++b > 20
,++b = 21 是大于 20 的,为 True - “与”操作需要所有条件都是 True 才返回真,因此结果返回假
- 但是逻辑与会将所有条件进行判断,因此 ++b 依旧进行运算,最后打印出
a = 6, b = 21
int a = 6;
int b = 20;
if (a > 10 & ++b > 20) {
System.out.println("进入判断");
}
System.out.printf("a = %d, b = %d\n", a, b); // a = 6, b = 21
短路与 &&:当第一个条件为 False 时,不再判断第二个条件
- 先判断
a > 10
,为 False - 因为第一个条件为 False,所以返回结果必然是假,因此不再判断后面的条件
++b > 20
并没有执行,因此最后打印出a = 6, b = 20
int a = 6;
int b = 20;
if (a > 10 && ++b > 20) {
System.out.println("进入判断");
}
System.out.printf("a = %d, b = %d\n", a, b); // a = 6, b = 20
逻辑或 | 和 短路或 ||
使用“或”操作,要求所有表达式的判断结果都是 False 才返回假,其余都返回真
逻辑或 | :所有条件都会进行判断
- 先判断
c > 5
,为 True - 再判断
++d > 20
,++d = 21 是大于 20 的,为 True - “或”操作需要所有条件都是 False 才返回假,因此结果返回真
- 因为逻辑或会将所有条件进行判断,所以 ++d 依旧进行运算,最后打印出
c = 6, d = 21
int c = 6;
int d = 20;
if (c > 5 | ++d > 20) {
System.out.println("进入判断");
}
System.out.printf("c = %d, d = %d\n", c, d); // c = 6, d = 21
短路或 || :当第一个条件为 True 时,不再判断第二个条件
- 先判断
c > 5
,为 True - 因为第一个条件为 True,所以返回结果必然是真,因此不再判断后面的条件
++d > 20
并没有执行,因此最后打印出c = 6, d = 20
int c = 6;
int d = 20;
if (c > 5 || ++d > 20) {
System.out.println("进入判断");
}
System.out.printf("c = %d, d = %d\n", c, d); // c = 6, d = 20
逻辑异或 ^
当 a 和 b 相同时,返回 False;不同时,返回 True
- 运算顺序从左往右
- 先判断
a < b
返回 true;再判断 b < c 返回 true - 因此
true ^ true
是相同的,返回 False - 再判断
a > c
返回 false - 因此
false ^ false
相同,返回 False
int a = 5;
int b = 6;
int c = 20;
boolean i = a < b ^ b < c ^ a > c;
System.out.println(i); // false
版权声明:本文为weixin_44260863原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。