Java 的逻辑运算符 与(&) 或( ) 异或(^)

“与”操作:全真为真

“或”操作:全假为假

逻辑与 & 和 短路与 &&

使用“与”操作,要求所有表达式的判断结果都是 True 才返回真,其余都返回假

逻辑与 &:所有条件都会进行判断

  1. 先判断 a > 10,为 False
  2. 再判断 ++b > 20,++b = 21 是大于 20 的,为 True
  3. “与”操作需要所有条件都是 True 才返回真,因此结果返回假
  4. 但是逻辑与会将所有条件进行判断,因此 ++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 时,不再判断第二个条件

  1. 先判断 a > 10,为 False
  2. 因为第一个条件为 False,所以返回结果必然是假,因此不再判断后面的条件
  3. ++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 才返回假,其余都返回真

逻辑或 | :所有条件都会进行判断

  1. 先判断 c > 5,为 True
  2. 再判断 ++d > 20,++d = 21 是大于 20 的,为 True
  3. “或”操作需要所有条件都是 False 才返回假,因此结果返回真
  4. 因为逻辑或会将所有条件进行判断,所以 ++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 时,不再判断第二个条件

  1. 先判断 c > 5,为 True
  2. 因为第一个条件为 True,所以返回结果必然是真,因此不再判断后面的条件
  3. ++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

  1. 运算顺序从左往右
  2. 先判断 a < b 返回 true;再判断 b < c 返回 true
  3. 因此 true ^ true相同的,返回 False
  4. 再判断 a > c 返回 false
  5. 因此 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版权协议,转载请附上原文出处链接和本声明。