一尘不染

Java逻辑运算符短路

java

哪一组短路,这到底意味着复杂的条件表达式短路了?

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);

}

阅读 579

收藏
2020-02-26

共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;
}

第二个版本使用非短路运算符&,并将抛出NullPointerExceptionif inputis null,但第一个版本将false无例外地返回;

2020-02-26