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并且i是0. i预先递增到1,这是结果++i.一元+不做什么,并被1分配给val.然后迭代语句val++发生,现在val是2. i仍然是1,所以满足for循环条件并发生第二次迭代.
第二次迭代:i再次预先递增,到2.一元+不做任何事情并被val分配2.迭代语句val++再次出现,现在就是3.但是i现在2,并且它不小于2,所以for循环终止,并且val- 3- 被打印.