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

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

Barbara Streisand
Barbara Streisand原创
2025-01-02 20:13:39514浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn