执行时(幕后)会发生什么?
int x = 7;
x = x++;
也就是说,当一个变量在一条语句中被递增并分配给自己时?我编译并执行了这个。即使在整个表述之后X仍然是7。在我的书里,它说x是递增的!
执行时(幕后)会发生什么?
int x = 7;
x = x++;
也就是说,当一个变量在一条语句中被递增并分配给自己时?我编译并执行了这个。即使在整个表述之后X仍然是7。在我的书里,它说x是递增的!
当前回答
这是因为您使用了后增量操作符。 在下面的代码行中
x = x++;
实际发生的情况是,你将x的值赋给x, x++在x赋给x后对x加1,这就是后加操作符的工作方式。它们在语句执行之后工作。所以在你的代码中,x先被返回然后再被递增。
如果你有
x = ++x;
答案是8,因为你使用了前增量操作符。这将在返回x值之前先对值进行递增。
其他回答
增量发生在x被调用之后,所以x仍然等于7。当调用x时,++x将等于8
它在“x = x++;”后面递增。如果你写x = ++x;它就是8。
这意味着: x++不等于X = X +1
因为:
int x = 7; x = x++;
x is 7
int x = 7; x = x = x+1;
x is 8
现在看来有点奇怪:
int x = 7; x = x+=1;
x is 8
非常依赖于编译器!
当你为x重新赋值时,它仍然是7。尝试x = ++x,你会得到8个其他的
x++; // don't re-assign, just increment
System.out.println(x); // prints 8
后增量算子的工作原理如下:
存储操作数以前的值。 增加操作数的值。 返回操作数的前一个值。
所以这个表述
int x = 7;
x = x++;
将评价如下:
X被初始化为值7 后增量操作符存储x之前的值,即7,以返回。 增加x,现在x等于8 返回x的前一个值,即7,它被赋给x,所以x再次变成7
因此x确实增加了,但由于x++将结果赋值回x,因此x的值被重写为它之前的值。