我们知道,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);

posted on 2020-12-28 17:32  能力与作品  阅读(93)  评论(0编辑  收藏  举报