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

int x = 7;
x = x++;

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


当前回答

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


x = x++;

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

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

其他回答

++x为增量前-> x在使用前为增量 x++是后增量-> X在使用后递增

int x = 7; -> x get 7 value <br>
x = x++; -> x get x value AND only then x is incremented

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


x = x++;

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

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

int x = 7;
x = x++;

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

这是因为您使用了后增量操作符。 在下面的代码行中

x = x++;

实际发生的情况是,你将x的值赋给x, x++在x赋给x后对x加1,这就是后加操作符的工作方式。它们在语句执行之后工作。所以在你的代码中,x先被返回然后再被递增。

如果你有

x = ++x;

答案是8,因为你使用了前增量操作符。这将在返回x值之前先对值进行递增。

这意味着: 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

非常依赖于编译器!