5

考虑这个简单的代码:

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

4 回答 4

17
counter = counter++;

上面的代码对counter. 它实际上与以下内容相同:

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

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

另一方面,如果您使用:

counter = ++counter;

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

counter++; // Or ++counter
于 2013-06-20T21:05:30.297 回答
2

问题是counter循环体末尾的值与开始时的值相同。该语句counter = counter++等效于:

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

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

于 2013-06-20T21:06:57.723 回答
1

代替

 counter = counter++;

作者: 1)

counter+=1;

或者

2)

counter++;

干杯!

于 2013-08-15T04:47:52.030 回答
0

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

于 2013-08-15T04:54:14.060 回答