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

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 +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
x = x++;

等于

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

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

当int x = 7;X = X ++;?

Ans - >x++表示首先使用x的值作为表达式,然后将其增加1。 这就是你的情况。RHS上的x的值被复制到LHS上的变量x,然后x的值增加1。

类似地,++x表示->先将x的值加1,然后在表达式中使用。 在这个例子中,如果x = ++x;// where x = 7 你会得到8的值。

为了更清楚,请尝试找出有多少printf语句将执行以下代码

while(i++ <5)   
  printf("%d" , ++i);   // This might clear your concept upto  great extend