【问题标题】:Why does this cause an infinite loop为什么这会导致无限循环
【发布时间】:2026-02-24 13:35:01
【问题描述】:

考虑这个简单的代码:

 // 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 没有。

【问题讨论】:

标签: java post-increment


【解决方案1】:
counter = counter++;

以上代码对counter没有影响。它实际上与:

int temp = counter;
counter++;
counter = temp;

所以,counter 的值根本没有改变。

另一方面,如果你使用:

counter = ++counter;

计数器先递增,然后重新分配给计数器。本质上,您可以简单地忽略分配部分,并简单地保留它:

counter++; // Or ++counter

【讨论】:

【解决方案2】:

问题是循环体末尾的counter的值和开头的一样。语句counter = counter++ 等价于:

int temp = counter;
counter = counter + 1;
counter = temp;

postIncrement++ 运算符返回递增前的值; ++preIncrement 运算符返回递增的值。

【讨论】:

    【解决方案3】:

    替换

     counter = counter++;
    

    作者: 1)

    counter+=1;
    

    2)

    counter++;
    

    干杯!

    【讨论】:

      【解决方案4】:

      最好避免这种分配。 ++ 旨在单独使用。如果你想自己增加,你可以做counter += 1

      【讨论】: