【发布时间】:2014-02-13 07:37:12
【问题描述】:
考虑以下代码:
public class Game {
public static void main(String[] args) {
int x = 0;
while (x < 1) {
x = x++;
}
}
}
使用我的编译器,这段代码会进入无限循环,但为什么呢?
首先,我们将 x 的值放入 x ,然后 only 然后我们将 1 添加到 x ,然后我预计 1 < 1 将是 false ,并且while 循环将终止 ...
但是不,这不会发生。
那么无限循环的原因可能是什么?
【问题讨论】:
-
对于调试器来说听起来像是一个很好的问题。一步一步通过它。或者在里面放一些日志语句。
-
x=x++;保持x不变 - 你增加它,然后用旧值(增加之前的值)替换它。 -
-1 不签出“相关”(第二个问题包含答案)
-
特别是当你说“首先,我们将 x 的值放入 x 中,然后才将 x 加 1”时,你似乎感到困惑。确实,从词法上讲,赋值在增量之前,但是赋值右侧的值必须在赋值发生之前计算出来。 (该值是 x 的 old 值,因为增量是 post-increment)。
标签: java loops while-loop