Integer i1 = new Integer(32);
Integer i2 = new Integer(32);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
Integer i3 = new Integer(132);
Integer i4 = new Integer(132);
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
Integer i5 = 32;
Integer i6 = 32;
System.out.println(i5 == i6); //true
System.out.println(i5.equals(i6)); //true
Integer i7 = 132;
Integer i8 = 132;
System.out.println(i7 == i8); //false
System.out.println(i7.equals(i8)); //true
以前只知道装箱和拆箱在JDK能自动了,没研究过代码,这两天看面试题的时候,踩到了雷,如上第三段代码的i5 == i6的判断还是想当然的填了个false,测试结果发现是true。
不知道原因,查了下源码
public static Integer valueOf(int i){
if(i>=IntegerCache.low && i<=Integ