java - 为什么这会导致无限循环

标签 java post-increment

考虑这个简单的代码:

 // 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/

相关文章:

c++ - C++中递增和取消引用指针的顺序

java - 如何使在windows上通过intellij用jdk12编写的程序并编译为.jar在Linux中使用openJDK运行

Win7/AMD上的Java程序

java - 我应该如何处理具有许多无效 URL 的代理 HTTP 请求

c++ - 重载 'operator++' 必须是一元或二元运算符(有 3 个参数)

c - 涉及带有后增量和前增量的数组值的意外输出

java - "x = x++"之后的 x 是什么?

java - 如何在触摸编辑字段时自动隐藏虚拟键盘?

java - 解析 DNS 响应答案部分未给出预期结果

Java:递增/递减运算符的前缀/后缀?