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内部で同一オブジェクトが使われるから、オブジェクトとして等しいという結果になっているようです。