关于自动装箱基本类型的值的比较

本文探讨了Java中Integer对象比较的特殊行为,特别是在使用'=='与equals方法的区别。揭示了自动装箱过程中JVM对于小范围整数的缓存机制及其对比较操作的影响。

【问题描述】As we know,在Java里面我们比较基本数据类型的的值是否相等直接用 “==” 操作符,这样是完全合理的,因为JVM在做运算的时候是比较的值。但是当我们比较2个对象是否相等的时候,我们只能用equals方法,这个方法比较的是对象的Hash地址是否相等。但是当我们比较基本类型的装箱类的时候,情况确出现了问题。例如

 

呀,奇怪了,为什么会这样呢?

 

【问题解释】

 

其实这个是Java的设计者们遗留下来的一个问题。

设计者的思路大概是,用==来进行比较,大概一般都是要比较值,但这种写法是不对的,这样吧,当对象值在一个字节以内时,比较值和比较地址的成本是一样的,那我就给你比较值,但如果值大于一个字节,比较值的成本就大过比较地址了,我就老老实实比较地址吧。

所以,也就是说Boolean,char(从/u0000到/u007f),long(-128到127),int(-128到127),byte,当用 == 去比较自动装箱的对象的时候,输出都是true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值