浅究 Java 中的 Integer

本文探讨了Java中Integer对象的缓存机制。当Integer值在-128到127之间时,会返回缓存的对象,超过此范围则会创建新对象。通过实例演示了这一机制。

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

先看代码:

public class Test {
	public static void main(String[] args) {
		Integer x = new Integer(125);
		Integer y = new Integer(125);
		System.out.println(x == y);//new了两个对象,false
		
		Integer a = 100;  
        Integer b = 100;  
        System.out.println(a == b);//返回的是同一个对象,true
        
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d);//new了两个对象,false
	}
}

再看断点调试结果:


x和y分别用了new,很明显new了两个对象。结果有id可以看得出。


a和b的值大于等于-128小于等于127,所以系统返回的是同一个对象,id都是25可以看出。

注意:a和b都是指向一个对象,如果这样:

int a = 100;
int b = 100;
那么a和b都没有指向任何对象,只是在栈中的一个字面值。


c和d大于127,所以分别new了两个对象。


因为 Integer c = 128; 实际上是执行了 Integer c = Integer.valueOf(128);

源代码是这样的:

public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }

意思就是范围-128 < i < 127的话就返回缓存对象,否则new一个新的。

IntegerCache.high默认是127,可以通过配置文件修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值