All*_*ang 2 java for-loop increment
这是我在网站上找到的一个例子.结果与我的预期完全不同.但没有进一步的解释.
int num = 0;
for (int i = 0; i < 3; ++i)
{
num += num++;
}
System.out.println(num);
Run Code Online (Sandbox Code Playgroud)
最后,结果将打印出来0
.我对这个操作感到很困惑num += num++
.有人可以解释一下吗?
num++
递增num after
指令(它是一个后递增运算符).
所以num += num++;
分配0
给num
(num = 0 + 0 + 0).
在指令之后num += num++;
,num
(即num++
)的后增量对于num
分配给另一个值(num += 0
结果是0
)没有影响.
所以num
很有价值0
.等等每次迭代.
更换num += num++
由++num
那就是预先递增运算符,你将得到的结果:3
(当你通过迭代递增1).
小智 6
这个任务
num += num++;
Run Code Online (Sandbox Code Playgroud)
在java中调用两个不同的规则:一个在左侧,一个在右侧.
右侧规则是众所周知的:后增量运算符的值是增量前变量的值.这使得值0++
为零.
另一条规则有点模糊(我不知道左侧规则).
根据Java语言规范 Java中的"15.7.1.首先评估左手操作数",Java首先决定分配什么,以及它的价值.然后+=
计算右侧.
考虑到这两个规则,上面的赋值相当于:
temp1 = num // and will assign to num
temp2 = num // before ++
num = num + 1
num = temp1 + temp2
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,最后一行将原始值num
(恰好是0
)添加到num
++之前的值,这确保了num
不会改变.它始于0
,它结束0
.
假设您现在使用的是预增量运算符:
num += ++num;
Run Code Online (Sandbox Code Playgroud)
现在情况略有不同.
int temp1 = num // and num will be assigned
int temp2 = num = num + 1
num = temp1 + temp2
Run Code Online (Sandbox Code Playgroud)
num
used in 的值num += xxx
不是++num
- 它是我们之前++num
执行的值.
所以我们有第一次迭代0+=1
,第二次迭代1+=2
,第三次迭代3+=4
- 那就是7