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

int x = 7;
x = x++;

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


当前回答

当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

其他回答

x = x++;

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

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

X = ++ X;

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

当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

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

x = x++;

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

如果你有

x = ++x;

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

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

因为x++在将值赋值给变量后会增加值。 因此,在执行这一行时:

x++;

变量x仍然有原始值(7),但是在另一行再次使用x,例如

System.out.println(x + "");

结果是8。

如果您想在赋值语句中使用x的递增值,请使用

++x;

这将使x增加1,然后将该值赋给变量x。

(编辑) 不是x = x++,而是x++;前者将x的原始值赋给自己,所以它实际上在这一行上什么也不做。