一尘不染

Java增量和赋值运算符

java

我对post 和pre 运算符感到困惑,例如以下代码

int x = 10;
x = x++;

sysout(x);

会打印10吗?

它打印10,但我希望它应该打印11

但是当我这样做

x = ++x; instead of x = x++;

它会按照我的预期输出11,所以为什么x = x ++; 不会改变x的值?


阅读 258

收藏
2020-09-08

共1个答案

一尘不染

否,正确的打印输出为10。理解结果背后原因的关键是预分配++x和后x++分配复合分配之间的差异。当使用预增量时,表达式的值在执行增量后获取。但是,当您使用后递增时,表达式的值
递增 之前 被获取,并 递增结果写回到变量之后被存储以供以后使用。

这是导致您看到的事件的顺序:

  • x 被安排了 10
  • 由于++处于后递增位置,因此x10)的当前值被存储以供以后使用
  • 的新值11存储到x
  • 的临时值10会存储在中x,并直接写入其中存储的临时值11
2020-09-08