请考虑以下代码:
public class Game {
public static void main(String[] args) {
int x = 0;
while (x < 1) {
x = x++;
}
}
}
使用我的编译器,这段代码进入无限循环,但为什么呢?
首先,我们将x
的值放入x
,仅,然后我们将{1}添加1,之后我会期望{{ 1}}将为false,而while循环将终止...
但不,那不会发生。
那么无限循环可能是什么原因?
答案 0 :(得分:7)
表达式x++
是一个后增量,意味着表达式的值是旧值0
,然后将其分配回x
,所以{{ 1}}始终在x
之后0
。
要摆脱无限循环,请不要将其分配回x = x++;
,保留后{}} x
的后增量值,保持原样:
x
答案 1 :(得分:1)
x++
几乎相当于
some-temporary = x;
x = x + 1;
now use the value of some-temporary
所以x = x++;
等同于
some-temporary = x;
x = x + 1;
x = some-temporary;
所以你应该能够看到为什么添加1的部分没有效果。
答案 2 :(得分:1)
这是因为x
在使用后会增加。因此,扩展的操作顺序将是:
oldX = x
x++
,即x = x + 1
x = oldX
oldX
是一个虚构的变量。
会发生x
总是分配oldX
,在我们的情况下为0
会导致无限循环。 x++
部分只是被忽略了。
解决方案:将x = x++
替换为x++
,或者,如果确实想要,则x = ++x
。
答案 3 :(得分:0)
x = x++
没有做你想做的事。将其替换为x++
。
x++
相当于x = x + 1
,因此您的作业没有意义。
有关此内容的更多信息,请参见以下答案: