JDK源码细节——Long与Integer的缓存问题

本文探讨了JDK1.8中Long和Integer包装类的缓存特性。当创建Long对象时,对于-128到127之间的数值,会复用缓存中的实例,导致"=="比较返回true。而对于Integer,除了默认-128到127的缓存范围,还可以通过JVM参数调整上限。理解这些细节有助于避免潜在问题。
摘要由CSDN通过智能技术生成

也是在道友的面经中看到这个问题,然后去查了一下,也自己去看了源码核实了一下,看的源码版本是jdk1.8,以此做个记录

创建长整型的包装类Long的实例时,可以是

Long a = 100L;//自动装箱
Long b = Long.valueOf(100L);//静态方法
Long c = new Long(100L);//构造器

我们用“==”来判断一下几个对象

Long a = 100L;
Long b = Long.valueOf(100L);
Long c = new Long(100L);

System.out.println(a==b);//true
System.out.println(a==c);//false
System.out.println(b==c);//false

但是如果将100L修改为128L,结果却是

Long a = 128L;
Long b = Long.valueOf(128L);
Long c = new Long(128L);
        
System.out.println(a==b);//false
System.out.println(a==c);//false
System.out.println(b==c);//false

这里区别在于100L的时候a、b是同一个实例,而128L的时候a、b不是同一个实例,我们去翻一下Long的源码,找到这个valueOf方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值