执行时(幕后)会发生什么?

int x = 7;
x = x++;

也就是说,当一个变量在一条语句中被递增并分配给自己时?我编译并执行了这个。即使在整个表述之后X仍然是7。在我的书里,它说x是递增的!


当前回答

后增量算子的工作原理如下:

存储操作数以前的值。 增加操作数的值。 返回操作数的前一个值。

所以这个表述

int x = 7;
x = x++; 

将评价如下:

X被初始化为值7 后增量操作符存储x之前的值,即7,以返回。 增加x,现在x等于8 返回x的前一个值,即7,它被赋给x,所以x再次变成7

因此x确实增加了,但由于x++将结果赋值回x,因此x的值被重写为它之前的值。

其他回答

它在“x = x++;”后面递增。如果你写x = ++x;它就是8。

int x = 7;
x = x++;

它在C和Java中有未定义的行为,请参阅这个答案。这取决于编译器发生了什么。

X确实增加了。但是你把原来的x值赋回了自身。


x = x++;

x++增加X并返回其旧值。 X =将旧值赋回给自身。

最后,x被赋回了它的初始值。

x = x++;

这是后增量操作符。它应该理解为“使用操作数的值,然后增加操作数”。

如果你想要发生相反的情况,即“增加操作数,然后使用操作数的值”,你必须使用预增加操作符,如下所示。

X = ++ X;

这个运算符首先将x的值加1,然后将值赋回给x。

x = x++;

等于

int tmp = x;
x++;
x = tmp;