为什么这会导致无限循环

Ell*_*ott 5 java post-increment

考虑这个简单的代码:

 // E1 
  public void doTest(String pattern) {
    int counter = 0;

    while (counter < 3) {
        counter = counter++;
    }
    System.out.println("Done");
}
Run Code Online (Sandbox Code Playgroud)

这会导致无限循环.

但是,如果增加计数器的语句是这样写的:

E2.  counter = ++counter;
Run Code Online (Sandbox Code Playgroud)

或这个

E3.    counter++;
Run Code Online (Sandbox Code Playgroud)

它正常终止.我理解增量发生在失败的版本中的赋值之后,这解释了为什么E2工作,但我认为java分配了变量的增量结果,如E3中那样递增.所以我很困惑为什么E1失败但E3没有.

Roh*_*ain 17

counter = counter++;
Run Code Online (Sandbox Code Playgroud)

上面的代码没有效果counter.它实际上与:

int temp = counter;
counter++;
counter = temp;
Run Code Online (Sandbox Code Playgroud)

所以,价值counter根本没有变化.

另一方面,如果您使用:

counter = ++counter;
Run Code Online (Sandbox Code Playgroud)

计数器首先递增,然后重新分配给计数器.基本上,你可以简单地忽略赋值部分,并保持简单:

counter++; // Or ++counter
Run Code Online (Sandbox Code Playgroud)