Integer包装类的坑

来源:互联网 发布:淘宝订单险怎么关闭 编辑:程序博客网 时间:2024/06/05 09:34

首先,我最近复习回顾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,你就明白了一切



原创粉丝点击