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不能让自动装箱“只工作”呢?
3 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
Integer
==
Integer
Integer.valueOf()
如果被装箱的值p为真、假、字节、\u0000至\u007f范围内的一个字符、或-128至127之间的int或短数,则让r1和r2是p两个装箱转换的结果。r1=r2的情况总是如此。
资源:
关于同一主题:
呼如林
TA贡献1798条经验 获得超3个赞
.equals
添加回答
举报
0/150
提交
取消