我在下面发布了两个示例。
在第一个示例中,我使用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()

09-27 02:42