Javaの罠 Part4(Integer)

Integer同士を=で比較すると変な現象が起こります.

ArrayList<Integer> list1=new ArrayList<Integer>(asList(1, 128));
ArrayList<Integer> list2=new ArrayList<Integer>(asList(1, 128));
System.out.println(list1.get(0)==list2.get(0));
System.out.println(list1.get(1)==list2.get(1)); // ( ゚д゚)は?頭がオカシイのでは?

true, falseの順で出力されます.

Object同士を比較しているからfalseになるのですが,[-128, 127]の間の数はキャッシュをしています.
new Integer, Integer.valueOf, Integer.parseIntで色々変わったりして面倒なので,intにキャストしたり,equalsなどを使いましょう.