Java:整数等于vs.==
从Java1.5开始,您几乎可以交换Integer
带着int
在很多情况下。
但是,我在代码中发现了一个潜在的缺陷,这让我有点吃惊。
以下代码:
Integer cdiCt = ...;Integer cdsCt = ...;...if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
当值相等时,似乎不正确地设置不匹配,尽管我无法确定在什么情况下。我在Eclipse中设置了一个断点,并看到Integer
值都是137,我检查了布尔表达式,它说它是假的,但当我跨过它时,它设置错配为true。
将条件更改为:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
解决了问题。
有人能解释一下为什么会发生这种事吗?到目前为止,我只在我自己的个人电脑上看到了我的本地主机上的行为。在这种情况下,代码成功地通过了大约20次比较,但在2上失败了。
如果这是一个普遍存在的问题,它应该会在我们的其他环境(dev和test)上造成错误,但是到目前为止,在执行这个代码片段的数百个测试之后,还没有人报告过这个问题。
使用它还不合法吗?==
比较两个Integer
价值?
除了下面所有的详细答案之外,下面的堆栈溢出链接还有相当多的附加信息。它本来可以回答我最初的问题,但由于我的问题中没有提到自动装箱,所以它没有出现在所选的建议中:
为什么编译器/JVM不能让自动装箱“只工作”呢?