首页 > Java > java教程 > 为什么Java中`==`有时无法正确比较`Integer`对象?

为什么Java中`==`有时无法正确比较`Integer`对象?

Barbara Streisand
发布: 2025-01-02 20:13:39
原创
470 人浏览过

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Java 中整数相等之谜

随着 Java 在 1.5 版本中引入自动装箱,Integer 对象的使用可以与原始 int 互换。然而,据观察,使用 == 比较 Integer 对象可能会导致意外结果。

在令人困惑的情况下,使用 == 比较 Integer 变量的代码被发现错误地将布尔标志设置为 true当这些值实际上相等时。但是,将比较切换为 !cdiCt.equals(cdsCt) 解决了该问题。

这种异常行为是由 JVM 对整数值的缓存机制引起的。对于 -128 到 127 范围内的值,JVM 会重用缓存的实例,确保高效的内存利用率。因此,无论其实际引用如何,此范围内的整数都显示为相同。

使用 == 比较 Integer 对象时,将检查引用相等性而不是内容。因此,如果使用缓存的实例,即使对象引用不同,比较也会返回 true。

使用 equals() 方法时不会出现此问题,因为它比较对象的值,忽略参考。因此,建议使用 equals() 来比较 Integer 对象,特别是当值的范围可能超出缓存范围或需要精确判断相等时。

以上是为什么Java中`==`有时无法正确比较`Integer`对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板