Java 中整数相等之谜
随着 Java 在 1.5 版本中引入自动装箱,Integer 对象的使用可以与原始 int 互换。然而,据观察,使用 == 比较 Integer 对象可能会导致意外结果。
在令人困惑的情况下,使用 == 比较 Integer 变量的代码被发现错误地将布尔标志设置为 true当这些值实际上相等时。但是,将比较切换为 !cdiCt.equals(cdsCt) 解决了该问题。
这种异常行为是由 JVM 对整数值的缓存机制引起的。对于 -128 到 127 范围内的值,JVM 会重用缓存的实例,确保高效的内存利用率。因此,无论其实际引用如何,此范围内的整数都显示为相同。
使用 == 比较 Integer 对象时,将检查引用相等性而不是内容。因此,如果使用缓存的实例,即使对象引用不同,比较也会返回 true。
使用 equals() 方法时不会出现此问题,因为它比较对象的值,忽略参考。因此,建议使用 equals() 来比较 Integer 对象,特别是当值的范围可能超出缓存范围或需要精确判断相等时。
以上是为什么Java中`==`有时无法正确比较`Integer`对象?的详细内容。更多信息请关注PHP中文网其他相关文章!