ArrayList から取り出した Integer の ==
出力はどれか。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(127);
list.add(127);
list.add(128);
list.add(128);
System.out.println((list.get(0) == list.get(1)) + " " + (list.get(2) == list.get(3)));
}
}
- A
true false - B
true true - C
false false - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: -128〜127 の Integer は同じオブジェクトが使い回されるので true、128 は別々のオブジェクトなので false です。
- B: 128 はキャッシュの範囲外なので、別々の Integer オブジェクトになり
==は false です。 - C: 127 はキャッシュの範囲内なので、同じオブジェクトになり
==は true です。 - D: Integer 同士を
==で比べるのは正しいコードです (参照の比較になります)。
ポイント
- add した int は自動で Integer に変換されます (
Integer.valueOf)。-128〜127 は同じオブジェクトが使い回されるので==が true になります。 - 128 は別々のオブジェクトなので
==は false です。Integer 同士の比較には equals を使います。