java--128陷阱!!!装箱拆箱

这篇博客探讨了Java中Integer对象比较时出现的128陷阱,即当数值超出[-128, 127]范围时,使用`==`比较会得到错误结果。原因是Integer.valueOf()方法对这个范围内的数值会复用对象,而超出范围则创建新对象。为避免此问题,推荐使用`.equals()`方法进行比较,或者先调用`.intValue()`进行拆箱后再使用`==`。了解这个问题对于优化代码和理解Java内存模型至关重要。

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

切入正题,什么叫做128陷阱?下面我们来看一段代码

按照我们的思路来看,a==b返回true,c==d也同样返回true,但是结果却和我们想的不一样:

那么,出现这个结果的原因又是什么呢?

其实在Integet的valueOf()方当中,存有一个[-128,127]范围的数组,如果数值超过了这个范围,会在内部类中创建新的cache数组,所以比较Integer类型的应该用equals,不能用==....

除此之外我们还有另外一个解决办法:主动调用拆箱的方法之后在用==进行比较:

这样,我们就可以得到true了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值