Java Integer的缓存问题

先来看一段代码

public class JavaIntegerCache {
    public static void main(String[] args) {
 
        Integer integer1 = 3;
        Integer integer2 = 3;
 
        
        System.out.println("integer1 == integer2");
 
        Integer integer3 = 300;
        Integer integer4 = 300;
 
        System.out.println("integer3 == integer4");
 
    }
}
输出为:

true

false

为什么是这个结果呢?按理说“==”是比较对象的地址,两个都应该输出为false才对呀。

这个问题与Integer的缓存策略有关。在Integer进行自动装箱操作,也就是调用valueOf()方法时,会先去IntegerCache.cache中查找。

IntegerCache是Integer的一个静态内部类,用来实现缓存支持。默认创建-128到127的数存储在cache数组中。这个缓存会在 Integer 类第一次被使用的时候被初始化出来。

所以在创建新的 Integer 对象之前会先在 IntegerCache.cache 中查找,如果找到值,则直接使用缓存里的对象;如果没有找到,则用new创建一个新的对象。

缓存的最大值127可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。

猜你喜欢

转载自blog.csdn.net/dl18215164175/article/details/74011862