请解释为什么此代码导致无限循环

时间:2016-02-15 21:51:52

标签: java loops unary-operator

for (int i = 0;  i < 10;) {
    i=i++;
    System.out.println("Hello World" );
}

基本上i的值保持不变,并且保持为0,因此它是无限的。但为什么不改变?

如果我将i=i++更改为i++,则可行。 (不是无限循环)。

2 个答案:

答案 0 :(得分:6)

因为i++在评估表达式后递增i,所以您基本上是在说i = i。如果你执行i = ++i那么它将起作用,因为它在评估表达式之前递增i

答案 1 :(得分:0)

逻辑上,分配是在评估右侧之后完成的,与任何其他Java分配一样。但是,&#34;后缀增量表达式的值是存储新值之前变量的值。&#34; (JLS, 15.14.2. Postfix Increment Operator ++

由于赋值,存储增量值之前i的值保持为零。