Java的前增量和后增量 [英] Pre- and postincrement in Java
问题描述
我只是想创建一个Java拼图,但我感到困惑.难题的一部分是:
I just wanted to create a little Java-Puzzle, but I puzzled myself. One part of the puzzle is:
以下代码段的作用是什么:
What does the following piece of code do:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
它输出 9
.
我的(至少部分是)错误的解释:
我不太确定,但是我认为 i + =
之后的词会像这样评估:
I'm not quite sure, but I think the term after i +=
gets evaluated like this:
所以
int i = 1;
i += ++i + i++ + ++i;
与
int i = 1;
i += ((++i) + (i++)) + (++i);
这是从左到右进行评估的(请参见 Java评估前后的评估).
This gets evaluated from left to right (See Pre and postincrement java evaluation).
第一个 ++ i
将 i
递增到 2
,并返回 2
.所以你有:
The first ++i
increments i
to 2
and returns 2
. So you have:
i = 2;
i += (2 + (i++)) + (++i);
i ++
返回 2
,因为它是 i
的新值,并将 i
递增为<代码> 3 :
The i++
returns 2
, as it is the new value of i
, and increments i
to 3
:
i = 3;
i += (2 + 2) + ++i;
第二个 ++ i
将 i
递增到 4
,并返回 4
:
The second ++i
increments i
to 4
and returns 4
:
i = 4;
i += (2 + 2) + 4;
因此,您最终得到的是 12
,而不是 9
.
So you end up with 12
, not 9
.
我的解释中的错误在哪里?正确的解释是什么?
推荐答案
i + = ++ i + i ++ + ++ i;
与 i = i + ++相同i + i ++ + ++ i;
从左到右计算右侧,得出 i = 1 + 2 + 2 + 4;
(得出 i = 9
).
The right-hand side is calculated from left-to-right, yielding i = 1 + 2 + 2 + 4;
(which yields i = 9
).
这篇关于Java的前增量和后增量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!