int m = 0;
m += m++;
System.out.println(m);
打印到0
但我认为m
会增加,最后是1
。
请有人解释一下。
注意:我知道后期增量如何运作(至少我认为我做了:P)。但我想弄清楚的是,当我说m + = m++
时我们假设m = m + m++
意味着m++
会在发送m
的值0
之后评估m = 0 + 0
,{{1}在这种情况下,并评估为m
然后增加m
的值,因为后增量。现在,如果发生了后期增量,为什么1
不是{{1}}
答案 0 :(得分:4)
答案 1 :(得分:4)
请考虑以下规则:
a += b
相当于a = a + b
。因此,m += m++
相当于m = m + m++
您可以看到在增量之前评估了m
在正确视线处的第一次出现并生成0
m++
增加m
并在增量前返回m
的原始值。
因此,在您的情况下m++
将m
设置为1
并返回0
在评估右侧后发生分配,而在评估右侧时发生后增量。
现在您可以看到您的表达式的计算方法如下:
评估右侧会产生0
并将m
设为1
分配将m
设置为右侧的值(0
)
答案 2 :(得分:2)
事件的顺序是:
即。这相当于:
tmp = m;
m++;
m = tmp;
如果你做m = ++ m,那么序列将是:
答案 3 :(得分:2)
答案:作业在执行作业之前评估副作用。
m += m++;
相当于
temp = m + m++; ; m is now 1, but temp is 0
m = temp; ; m is now 0 again
答案 4 :(得分:1)
int m = 0
此时m为0
m += m++;
扩展为m=m+(m++)
m
返回0
m++
返回m的值0
,然后将其递增为1
将m+(m++)
转换为0+0
(此时m为1
)
然后将其分配给m
,最终值为m
。
提示:当您触摸该值时,请避免后增量
答案 5 :(得分:1)
在您的代码中
m+ =m++;
结果 - >> M值+(后递增m值(m ++))
最初
m值= 0
后递增(m ++)m值= 0(前递增(++ m)= 1)
答案 6 :(得分:0)
m ++之前返回m的值然后递增它,与++ m相反,然后返回,如:
int m++(int m){
int tmp = m;
m = m+1;
return tmp;
}
int ++m(int m){
m = m+1;
return m;
}
答案 7 :(得分:0)
f
是您的代码。 g
是一个展开版本,展示了他们打印0
的原因。
class Test {
private static void f() {
int x = 0;
x += x++;
System.out.println(x);
}
private static void g() {
int x = 0;
int preInc = x; // preInc = 0
x += 1; // x = 1
x = preInc; // x = 0
System.out.println(x);
}
public static void main(String[] args) {
f();
g();
}
}