在while循环中比较两个相等的整数时,等于运算符会失败吗?

Eri*_*ass 3 java android break comparison-operators

我在下面发布了两个例子.

在第一个例子中,我使用等于运算符,而while进程永远持续,而不是在它应该的时候断开.

在第二个例子中,我使用了大于或等于运算符,并且进程在应该的时候中断.

这怎么可能呢?

例1:

  Integer myVar1 = 42985;
  Integer myVar2 = 1;
  while (true)
  {
     if (myVar2 == myVar1)
     {
     break;
     }

  ++ myVar2;
  }
Run Code Online (Sandbox Code Playgroud)

例2:

  Integer myVar1 = 42985;
  Integer myVar2 = 1;
  while (true)
  {
     if (myVar2 >= myVar1)
     {
     break;
     }

  ++ myVar2;
  }
Run Code Online (Sandbox Code Playgroud)

编辑:谢谢大家的好答案!我现在完全理解这个问题,这个新信息解释了我在我的应用程序中遇到的一些奇怪的行为.我希望我能选择一个以上的最佳答案.

hax*_*ode 5

您将需要用于.equals()比较两个对象的值.

无论何时使用==它都会比较对象的实例. .equals()是一个继承自的方法Object,用于比较对象的值.


par*_*fal 5

这是自动拳击不太令人愉快的效果之一.

在第一个示例中,==运算符指示标识相等:如果它们是同一个实例,则两个对象将仅相等.

在第二个示例中,'> ='运算符表示数字比较:两个对象将自动取消装箱,然后进行比较.

让事情变得更加混乱,JVM缓存了一系列"小"整数(-128 <= X <= 127,iirc)Integer,因此==运算符有时会起作用.

底线:使用.equals().compareTo().