社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Java challenge ListRemoveIf

何が出力されるのか?

public class ListRemoveIf {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(22);
		list.add(23);
		list.add(10);
		list.add(12);
		list.add(13);
		list.add(0);
		list.removeIf(e -> e == new Integer(12) || e.equals(new Integer(22)));

		System.out.println(list);
	}
}

考察
これは、リストの要素を1つずつチェックして、もし12か22であれば、それを取り除こうとしているように見える。
でも、オブジェクト型(Integer)は == で比較は出来ないから、22だけが取り除かれると思われる。

結果
[23, 10, 12, 13, 0]
22だけが除外されました。

もし e == new Integer(12) の部分が e == 12 だったらどうなるか?
[23, 10, 13, 0]
結果は 12 も除外されました。
"-128から127"までの間の数値は、java内部で同一オブジェクトが使われるから、オブジェクトとして等しいという結果になっているようです。