我们知道,Integer是int的封装类。我们可以将int赋值给Integer,这个过程叫做装箱,装箱实际调用的是Integer.valueOf(int)方法。
那么,你知道Integer a1 = 100; Integer a2 = 100; a1 == a2的结果是true or false吗?
结果是true,我们知道用等号比较实际上对比的是地址是否相等,那么a1 == a2为true,则说明他们的地址相等,则不是调用new方法初始化的值,因为new方法肯定会分配一个新的地址。
查看Integer源码,我们知道了,当int值在-128和127之间时,会去取已经初始化好的值。
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);