Java 逻辑运算符短路

2022-08-31 08:53:10

哪个集合是短路,复杂条件表达式是短路到底是什么意思?

public static void main(String[] args) {
  int x, y, z;

  x = 10;
  y = 20;
  z = 30;

  // T T
  // T F
  // F T
  // F F

  //SET A
  boolean a = (x < z) && (x == x);
  boolean b = (x < z) && (x == z);
  boolean c = (x == z) && (x < z);
  boolean d = (x == z) && (x > z);
  //SET B    
  boolean aa = (x < z) & (x == x);
  boolean bb = (x < z) & (x == z);
  boolean cc = (x == z) & (x < z);
  boolean dd = (x == z) & (x > z);

}

答案 1

和 运算符“短路”,这意味着如果没有必要,它们不会评估右侧。&&||

当和运算符用作逻辑运算符时,始终计算两端。&|

每个操作员只有一种短路情况,它们是:

  • false && ...- 没有必要知道右边是什么,因为结果只能与那里的值无关false
  • true || ...- 没有必要知道右边是什么,因为结果只能与那里的值无关true

让我们在一个简单的例子中比较行为:

public boolean longerThan(String input, int length) {
    return input != null && input.length() > length;
}

public boolean longerThan(String input, int length) {
    return input != null & input.length() > length;
}

第 2 个版本使用非短路运算符,并抛出 if is ,但第 1 个版本将无一例外地返回。&NullPointerExceptioninputnullfalse


答案 2

SET A 使用短路布尔运算符。

在布尔运算符的上下文中,“短路”的意思是,对于一组布尔值 b1、b2、...、bn,只要这些布尔值中的第一个是 true (||) 或 false (&&)。短路版本将立即停止评估。

例如:

// 2 == 2 will never get evaluated because it is already clear from evaluating
// 1 != 1 that the result will be false.
(1 != 1) && (2 == 2)

// 2 != 2 will never get evaluated because it is already clear from evaluating
// 1 == 1 that the result will be true.
(1 == 1) || (2 != 2)

推荐