Tag: equals operator

Java:Integer等于==

从Java 1.5开始,在很多情况下,你几乎可以用Integer来交换Integer 。 不过,我在代码中发现了一个潜在的缺陷,这让我感到很惊讶。 以下代码: Integer cdiCt = …; Integer cdsCt = …; … if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true; 似乎是错误的设置不匹配时,值是相等的,虽然我不能确定在什么情况下。 我在Eclipse中设置了一个断点,看到Integer值都是137,我检查了布尔expression式,它说这是错误的,但是当我跨过它,它是设置不匹配为真。 将条件更改为: if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt)) 解决了这个问题。 谁能说出为什么发生这种情况? 到目前为止,我只在自己的电脑上看到了本地主机上的行为。 在这个特定的情况下,代码成功地通过了大约20个比较,但在2失败。问题是始终可重现的。 如果这是一个普遍的问题,它应该是在我们的其他环境(开发和testing)造成的错误,但到目前为止,没有人经过数百testing执行此代码段后报告的问题。 使用==来比较两个Integer值是不是合法? 除了下面的所有好的答案外,下面的计算器链接还有相当多的附加信息。 它实际上会回答我原来的问题,但因为我没有提到我的问题的自动装箱,它没有出现在选定的build议: 为什么编译器/ JVM不能使自动装箱“只是工作”?