我只是想创建一个小的 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。
我的解释中的错误在哪里?什么是正确的解释?