为什么这段代码会进入无限循环?

时间:2014-01-22 23:52:18

标签: java loops while-loop

请考虑以下代码:

public class Game {

    public static void main(String[] args) {

        int x = 0;
        while (x < 1) {
          x = x++;
        }

    }

}

使用我的编译器,这段代码进入无限循环,但为什么呢?

首先,我们将x的值放入x,然后我们将{1}添加1,之后我会期望{{ 1}}将为false,而while循环将终止...

但不,那不会发生。

那么无限循环可能是什么原因?

4 个答案:

答案 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在使用后会增加。因此,扩展的操作顺序将是:

  1. oldX = x
  2. x++,即x = x + 1
  3. x = oldX
  4. oldX是一个虚构的变量。

    会发生x总是分配oldX,在我们的情况下为0会导致无限循环。 x++部分只是被忽略了。

    解决方案:将x = x++替换为x++,或者,如果确实想要,则x = ++x

答案 3 :(得分:0)

x = x++没有做你想做的事。将其替换为x++

x++相当于x = x + 1,因此您的作业没有意义。

有关此内容的更多信息,请参见以下答案:

Why does this go into an infinite loop?