Java Silverの&&と||の纏め

Java Silverの&&と||の纏め

if分のand条件やor条件で、&&や||を使いますが、この問題の引っかけがありました。

public class Main {
  public static void main(String[] args) {
    boolean flag = false;
    int i = 10;
    if (flag && ++i < 10) { // 左辺の評価式がfalseの為、右辺は評価されない為インクリメントされない
      System.out.println(i);
    } else {
      System.out.println(i); // 10と表示される
    }
  }
}

上記の場合、if文の左辺がfalseだと右辺は評価されません。

これで、&&の箇所が||の場合は、if文の左辺がfalseとなり、右辺を評価しますので、インクリメントされて11と表示されます。

public class Main {
  public static void main(String[] args) {
    boolean flag = false;
    int i = 10;
    if (flag || ++i < 10) { // 左辺の評価式がfalseの為、右辺は評価されない為インクリメントされない
      System.out.println(i);
    } else {
      System.out.println(i); // 10と表示される
    }
  }
}

&と|について

&&に対して&、||に対して|があります。

&と|の違いは、左辺がtrue,falseに関わらず右辺も評価するという点です。

以下は&の例です。

public class Main {
  public static void main(String[] args) {
    boolean flag = false;
    int i = 10;
    if (flag & ++i < 10) { // 左辺の評価式がfalseだが、右辺が評価されてインクリメントされる
      System.out.println(i);
    } else {
      System.out.println(i); // 11と表示される
    }
  }
}

以下は|の例です。

public class Main {
  public static void main(String[] args) {
    boolean flag = true;
    int i = 10;
    if (flag | ++i < 10) { // 左辺の評価式がtrueだが、右辺も評価されてインクリメントされる
      System.out.println(i);
    } else {
      System.out.println(i); // 11と表示される
    }
  }
}

コメント

タイトルとURLをコピーしました