美文网首页
Integer缓存机制

Integer缓存机制

作者: 夺命404 | 来源:发表于2019-12-03 23:41 被阅读0次
            Integer integer = 128;
            Integer integer1 = 128;
    
            Integer integer2 = 127;
            Integer integer3 = 127;
            System.out.println(integer == integer1);  // false
            System.out.println(integer2 == integer3); // true  --- why?
    

    这是Integer中的缓存机制 默认缓存-128~127

    Integer integer = 128;
    我们进行反编译后: Integer integer = Integer.valueOf(128);

    // 这是Integer的valueOf()方法  IntegerCache.low这是缓存最小值-128  IntegerCache.high这是缓存最大值127
    public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)  // 如果在这个缓存范围内就直接返回缓存中的值
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);  // 如果不在范围内就返回一个新的实例对象
    }
    

    Integer a = 228;
    int a1 = a; 这个反编译过来是 a.intValue();
    拆箱默认调用包装类的方法intValue()返回值

    包装器的缓存:

    • Boolean:(全部缓存)
    • Byte:(全部缓存)
    • Character(<= 127缓存)
    • Short(-128 — 127缓存)
    • Long(-128 — 127缓存)
    • Integer(-128 — 127缓存)
    • Float(没有缓存)
    • Doulbe(没有缓存)

    相关文章

      网友评论

          本文标题:Integer缓存机制

          本文链接:https://www.haomeiwen.com/subject/agoqgctx.html