我只是想创建一个小小的Java-Puzzle,但我迷惑了自己。拼图的一部分是:Java中的前后增量
什么下面的代码做:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
它输出9
。
我的(至少部分)错误解释:
我不太清楚,但我想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
。
我的解释中的错误在哪里?什么是正确的解释?
你确定它输出8吗?因为我输出9. – 2012-07-11 11:48:05
感谢您的提示。它输出9(8是其他难题之一)。然而,9不是12. – 2012-07-11 11:49:15
我得到的输出为9! – Patton 2012-07-11 11:49:39