論理演算子(&& の短絡評価と副作用の有無)難易度 高無料
次のコードの出力として正しいものを選べ。
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 }
- A
false -1 - B
false -12 - C
true -12 - D
NullPointerExceptionがスローされる
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
&&(条件積・短絡評価)は、左辺が 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"は追加されない。 - C
check(-1, sb)は-1 > 0がfalseを返すため、rはfalseになる(trueにはならない)。 - D
sbはnew StringBuilder()で初期化済みの非nullオブジェクト。append呼び出しに問題はなく例外は発生しない。
ひっかけ: 「
&& の両辺は必ず両方評価される」という誤解が典型。実際には左辺が false の時点で右辺の副作用(メソッド呼び出し・sb.append など)は一切発生しない。両辺を必ず評価したい場合は非短絡の & を使う必要がある。コマンド例と想定される挙動(未実行)
出力: false -1
公式ドキュメント・関連JLS SE11 §15.23 Conditional-And Operator &&↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)