考虑这个简单的代码:
// E1
public void doTest(String pattern) {
int counter = 0;
while (counter < 3) {
counter = counter++;
}
System.out.println("Done");
}
这会导致无限循环。
但是如果递增计数器的语句是这样写的:
E2. counter = ++counter;
或者这个
E3. counter++;
它正常终止。我知道递增发生在失败版本的赋值之后,这解释了为什么 E2 起作用,但我认为 java 分配了变量中递增的结果,该变量在 E3 中递增。所以我对为什么 E1 失败而 E3 没有失败感到困惑。
最佳答案
counter = counter++;
以上代码对counter
没有影响。它实际上与:
int temp = counter;
counter++;
counter = temp;
因此,counter
的值根本没有改变。
另一方面,如果您使用:
counter = ++counter;
计数器先递增,然后重新赋值给counter。本质上,您可以简单地忽略赋值部分,并保持简单:
counter++; // Or ++counter
关于java - 为什么这会导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223730/