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

}

ベストアンサー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 番目のバージョンでは例外なしで戻ります。NullPointerExceptioninputnullfalse

おすすめ記事