Integer缓存机制

        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(没有缓存)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容