我只是想创建一个小的 Java-Puzzle,但我自己也很困惑。难题的一部分是:
下面这段代码是做什么的:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
它输出9
.
我的(至少部分)错误的解释:
我不太确定,但我认为 after 的术语i +=
是这样评估的:
所以
int i = 1;
i += ++i + i++ + ++i;
是相同的
int i = 1;
i += ((++i) + (i++)) + (++i);
这从左到右进行评估(请参阅Pre and postincrement java evaluation)。
第一个++i
增量i
为2
并返回2
。所以你有了:
i = 2;
i += (2 + (i++)) + (++i);
i++
返回,因为它是的2
新值i
,并递增i
到3
:
i = 3;
i += (2 + 2) + ++i;
第二个++i
增量i
为4
并返回4
:
i = 4;
i += (2 + 2) + 4;
所以你最终得到12
,不是9
。
我的解释中的错误在哪里?什么是正确的解释?