考虑这个简单的代码:
// 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没有。
答案 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
。