10

考虑这段代码:

long val = 0;
for(int i = 0; i < 2; val++)
    val =+ ++i;

System.out.println(val);

到底是为什么val = 3

我会这样计算:

val     i
0       0   i < 2 = true;
0       0   ++i;
0       1   val =+ 1;
1       1   (end of for loop) val++;
2       1   i < 2 = true;
2       1   ++i;
2       2   val =+ 2;
4       2   (end of for loop) val++;
5       2   i < 2 = false;
Output: 5

但它是 3。我不明白为什么val =+ ++i第二次没有完成增量,i = 1并且预增量到i = 2.

4

4 回答 4

18

让我们首先关注看起来不寻常的线:

val =+ ++i;

这里的运算符是=(赋值)、+(一元加)和++(预增量)。没有=+操作员。Java 将其解释为两个运算符:=+. 添加适当的空格会更清楚:

val = + ++i;

现在我们来分析处理:

第一次迭代:val并且i0i预递增到1,这是 的结果++i。一元+不做任何事情,并1分配给val. 然后迭代语句val++发生,现在val2i仍然是1,因此满足for循环条件并发生第二次迭代。

第二次迭代:i再次预递增到2. 一元+不做任何事情并被val分配2。迭代语句val++再次出现,现在是3. 但是iis now 2,并且不小于2,所以for循环终止,并且val--3被打印出来。

于 2013-10-07T22:43:19.653 回答
0

=+根据官方文档,Java中没有运算符。改为使用+=以获得所需的效果。

于 2013-10-07T22:45:42.520 回答
0

如果使用的运算符是您+=添加val.i+1

在您的情况下,您在最后一次迭代时将每次的值分配给 val 。i+1i = 2val = 3

于 2013-10-07T22:46:27.230 回答
0

修正计算:

val   i
0     0  i<2 = true;
0     0  ++i;
0     1  val = +i = 1;
1     1  (end of for loop) val++;
2     1  i<2 = true;
2     1  ++i;
2     2  val = +i = 2;
2     2  (end of for loop) val++;
3     2  i<2 = false;
Output: 3
于 2013-10-07T22:50:13.547 回答