Java 中的整数比较难题:== 与 equals()
在 Java 1.5 及更高版本中,整数可以被视为原始 int在许多场景中的值。然而,最近的一个代码问题引发了关于使用 == 运算符进行整数比较的有效性的问题。
问题陈述
考虑以下代码片段:
Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true;
当 cdiCt 和 cdsCt 的值相等时,此代码似乎将不匹配设置为 true。在检查布尔表达式时,问题变得很明显:当值确实相等时,它的计算结果为 false,但当继续执行时,不知何故,不匹配仍然设置为 true。
解决方案
解决这个问题的方法是使用 equals() 方法相反:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
说明
== 运算符比较两个对象的内存引用,而 equals() 方法比较它们的值。对于像 int 这样的基本类型, == 运算符按预期工作。但是,对于像 Integer 这样的对象,== 运算符仅检查引用是否指向相同的缓存值。
出于性能原因,JVM 缓存 -128 到 127 之间的 Integer 值。因此,当使用 == 比较两个整数时,仅当两个值都在此范围内时,该运算符才会返回 true。在给定的场景中,这些值可能超出此范围,从而导致意外行为。
结论
虽然使用 == 比较基元是可以接受的,但它建议使用 equals() 方法来比较包装对象,例如 Integer。无论涉及的值如何,这都可以确保行为一致。
其他资源
以上是Java 整数比较:什么时候应该使用 `==` 和 `equals()`?的详细内容。更多信息请关注PHP中文网其他相关文章!