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

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

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作成・AIで再検証済

解説

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

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

出力は false -1。

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

この問題集の作り方

  1. 問題と解説はAIが作成しています。この資格の問題に、有資格者(著者)の監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  5. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
演算子 を含む問題を分野別に演習できます。
演習する →