为什么这会导致无限循环

时间:2013-06-20 21:04:09

标签: 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没有。

4 个答案:

答案 0 :(得分:17)

counter = counter++;

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

相同
int temp = counter;
counter++;
counter = temp;

因此,counter的价值根本没有变化。

另一方面,如果您使用:

counter = ++counter;

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

counter++; // Or ++counter

答案 1 :(得分:2)

问题是循环体末端的counter值与开头时的值相同。声明counter = counter++等同于:

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

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

答案 2 :(得分:1)

替换

 counter = counter++;

由: 1)

counter+=1;

2)

counter++;

干杯!

答案 3 :(得分:0)

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