从 Java 1.5 开始,您几乎可以在许多情况下Integer
与之互换。int
然而,我发现我的代码中有一个潜在的缺陷,这让我有点吃惊。
以下代码:
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
当值相等时,似乎错误地设置了不匹配,尽管我无法确定在什么情况下。我在 Eclipse 中设置了一个断点,发现Integer
两个值都是 137,我检查了布尔表达式,它说它是假的,但是当我越过它时,它把不匹配设置为真。
将条件更改为:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
解决了这个问题。
任何人都可以解释为什么会这样吗?到目前为止,我只在我自己的 PC 上的本地主机上看到了这种行为。在这种特殊情况下,代码成功通过了大约 20 次比较,但在 2 次比较失败。该问题始终可以重现。
如果这是一个普遍存在的问题,它应该会导致我们的其他环境(开发和测试)出现错误,但到目前为止,在执行此代码片段的数百次测试之后,还没有人报告这个问题。
==
使用比较两个Integer
值仍然不合法吗?
除了下面所有的好答案之外,下面的 stackoverflow 链接还有很多额外的信息。它实际上会回答我原来的问题,但是因为我没有在我的问题中提到自动装箱,所以它没有出现在选定的建议中: