Java Integer的缓存问题

本文解析了Java中Integer对象在-128至127范围内通过自动装箱复用同一对象的机制,并解释了这一特性如何影响==运算符的比较结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看一段代码

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 修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值