在 Java 1.5中,在很多情况下,您都可以将 Integer
与 int
交换。
然而,我在代码中发现了一个潜在的缺陷,这让我有点吃惊。
以下代码:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
看起来是不正确的设置不匹配的时候,值是相等的,虽然我不能确定在什么情况下。我在 Eclipse 中设置了一个断点,发现 Integer
值都是137,我检查了布尔表达式,它说它是 false,但是当我越过它时,它将错配设置为 true。
将条件语句更改为:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
解决了问题。
有人能解释一下为什么会这样吗?到目前为止,我只在我自己的 PC 上看到了本地主机上的行为。在这个特殊的例子中,代码成功地通过了大约20次比较,但是在2次比较中失败了。这个问题一直是可重复的。
如果它是一个普遍的问题,那么它应该会在我们的其他环境(dev 和 test)中导致错误,但是到目前为止,在执行了数百个代码片段的测试之后,还没有人报告这个问题。
使用 ==
比较两个 Integer
值是否仍然不合法?
除了下面的所有答案之外,下面的 stackoverflow 链接还有相当多的附加信息。它实际上已经回答了我最初的问题,但因为我没有提到自动装箱在我的问题,它没有显示在选定的建议: