AI作成・独立検証済(有資格者監修なし)1Z0-815 対応
論理演算子(&& の短絡評価と副作用の有無)難易度 高無料

次のコードの出力として正しいものを選べ。

1  public class Q6 {
2      static boolean check(int x, StringBuilder sb) {
3          sb.append(x);
4          return x > 0;
5      }
6      public static void main(String[] args) {
7          StringBuilder sb = new StringBuilder();
8          boolean r = check(-1, sb) && check(2, sb);
9          System.out.println(r + " " + sb);
10     }
11 }
  1. Afalse -1
  2. Bfalse -12
  3. Ctrue -12
  4. DNullPointerException がスローされる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済

解説

&&(条件積・短絡評価)は、左辺が false であればその時点で式全体が false と確定し、右辺は評価されない(呼び出されない)

  • check(-1, sb) が実行される:sb"-1" が追加され、-1 > 0false を返す。
  • 左辺が false なので && は短絡し、check(2, sb) は呼ばれないsb"2" は追加されない)。
  • r = falsesb の内容は "-1" のまま。

出力は false -1

各誤答が違う理由
  • B&& は左辺が false の時点で短絡し、右辺 check(2, sb)呼ばれない。よって sb"2" は追加されない。
  • Ccheck(-1, sb)-1 > 0false を返すため、rfalse になる(true にはならない)。
  • Dsbnew StringBuilder() で初期化済みの非 null オブジェクト。append 呼び出しに問題はなく例外は発生しない。
ひっかけ:&& の両辺は必ず両方評価される」という誤解が典型。実際には左辺が false の時点で右辺の副作用(メソッド呼び出し・sb.append など)は一切発生しない。両辺を必ず評価したい場合は非短絡の & を使う必要がある。
コマンド例と想定される挙動(未実行)
出力:
false -1
公式ドキュメント・関連JLS SE11 §15.23 Conditional-And Operator &&
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →