首先,我最近复习回顾Java基础的时候,遇到一个问题,比如说
Integer i =new Integer(127);
Integer ii = new Integer(127);
System.out.println(i==ii);
System.out.println("----------------------");
Integer u = 127;
Integer uu = 127;
System.out.println(u==uu);
System.out.println("----------------------");
Integer o = 128;
Integer oo =128;
System.out.println(o==oo);
我想如果在你不看源码的情况下,肯定会以为答案是:false,true,true
但是答案是:
false
----------------------
true
----------------------
false
然后看到Integer的源码,
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
看到这段应该懂了,如果你放进来的某个数大于low或者小于high,那么从缓冲区中读取数据,如果都不满足则创建对象。
然后点击上面的low跟high,查看到IntegerCache.low和IntegerCache.high,你就明白了一切