どのセットが短絡しているのでしょうか。また、複雑な条件式が短絡しているというのは、具体的にはどういう意味でしょうか。
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
&&
and演算子||
は「短絡」します。つまり、必要でない場合は右側を評価しません。
&
and演算子|
は、論理演算子として使用される場合、常に両辺を評価します。
各演算子には短絡のケースが 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 番目のバージョンでは例外なしで戻ります。NullPointerException
input
null
false