哪一组短路,这到底意味着复杂的条件表达式短路了?
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); }
在&&与||运营商“短路”,这意味着如果没有必要,他们不评价的右手边。
&&
||
在&与|运营商,如逻辑运算符时,始终评估两侧。
&
|
每个操作员只有一种短路情况,它们是:
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无例外地返回;
NullPointerExceptionif inputis null