执行时(幕后)会发生什么?
int x = 7;
x = x++;
也就是说,当一个变量在一条语句中被递增并分配给自己时?我编译并执行了这个。即使在整个表述之后X仍然是7。在我的书里,它说x是递增的!
执行时(幕后)会发生什么?
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的值被重写为它之前的值。
其他回答
后增量算子的工作原理如下:
存储操作数以前的值。 增加操作数的值。 返回操作数的前一个值。
所以这个表述
int x = 7;
x = x++;
将评价如下:
X被初始化为值7 后增量操作符存储x之前的值,即7,以返回。 增加x,现在x等于8 返回x的前一个值,即7,它被赋给x,所以x再次变成7
因此x确实增加了,但由于x++将结果赋值回x,因此x的值被重写为它之前的值。
增量发生在x被调用之后,所以x仍然等于7。当调用x时,++x将等于8
因为x++在将值赋值给变量后会增加值。 因此,在执行这一行时:
x++;
变量x仍然有原始值(7),但是在另一行再次使用x,例如
System.out.println(x + "");
结果是8。
如果您想在赋值语句中使用x的递增值,请使用
++x;
这将使x增加1,然后将该值赋给变量x。
(编辑) 不是x = x++,而是x++;前者将x的原始值赋给自己,所以它实际上在这一行上什么也不做。
像x = x++;表明你可能误解了++操作符的作用:
// original code
int x = 7;
x = x++;
让我们重写它来做同样的事情,基于删除++操作符:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
现在,让我们重写它(我认为)你想要的:
// original code
int x = 7;
x++;
这里的微妙之处在于,++操作符修改变量x,这与x + x等表达式不同,后者将计算为int值,但变量x本身不变。考虑一个像值得尊敬的for循环这样的结构:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
注意到里面的i++了吗?这是同一个算子。我们可以像这样重写这个for循环,它的行为是一样的:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
我还建议在大多数情况下不要在较大的表达式中使用++运算符。由于它在增量前和增量后(分别是++x和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