= Java中的运算符

Ale*_*ein 10 java math operators

考虑以下代码:

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

System.out.println(val);
Run Code Online (Sandbox Code Playgroud)

为什么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
Run Code Online (Sandbox Code Playgroud)

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

rge*_*man 18

让我们首先关注不寻常的线条:

val =+ ++i;
Run Code Online (Sandbox Code Playgroud)

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

val = + ++i;
Run Code Online (Sandbox Code Playgroud)

现在让我们分析一下处理过程:

第一次迭代:val并且i0. i预先递增到1,这是结果++i.一元+不做什么,并被1分配给val.然后迭代语句val++发生,现在val2. i仍然是1,所以满足for循环条件并发生第二次迭代.

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