我在下面发布了两个示例。
在第一个示例中,我使用equal-to运算符,而while进程将永远继续,而不是在应有的时候中断。
在第二个示例中,我使用大于或等于运算符,该过程在应有的时候中断。
这怎么可能?
示例1:
Integer myVar1 = 42985;
Integer myVar2 = 1;
while (true)
{
if (myVar2 == myVar1)
{
break;
}
++ myVar2;
}
范例2:
Integer myVar1 = 42985;
Integer myVar2 = 1;
while (true)
{
if (myVar2 >= myVar1)
{
break;
}
++ myVar2;
}
编辑:
谢谢大家的精彩回答!
我现在已经完全理解问题了,这些新信息说明了我在应用程序中遇到的几种奇怪行为。
我希望我可以选择多个最佳答案。
最佳答案
这是自动装箱的较差效果之一。
在您的第一个示例中,==
运算符指示身份相等:两个对象只有相同的实例,才相等。
在第二个示例中,“> =”运算符指示数值比较:两个对象将自动取消装箱,然后进行比较。
使事情更加混乱,JVM缓存了一系列“小”整数(-128 Integer值,因此==
运算符有时可以工作。
底线:使用.equals()
和.compareTo()
。