public class Main {
public static void main(String[] args) {
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b);
System.out.println(c == d);
}
}
選択肢
- あなたの回答
- 正解
正解
C. true / false
詳細解説
-128〜127 の Integer はキャッシュされ、同じ値のオートボクシングは同一インスタンスを返します。127 は範囲内なので a == b は true。128 は範囲外なので c と d は別インスタンスとなり c == d は false です。
なぜ他の選択肢が違うのか
- 128 以上はキャッシュされないため c == d は false になります。
- 127 はキャッシュ範囲内なので a == b は true になります。
- 127 と 128 で挙動が異なります。
罠ポイント
Integer の == 比較はキャッシュ範囲で結果が変わります。値の比較には必ず equals を使いましょう。