Java增量和赋值运算符

use*_*547 14 java increment pre-increment post-increment

我对post ++和pre ++运算符感到困惑,例如在下面的代码中

int x = 10;
x = x++;

sysout(x);
Run Code Online (Sandbox Code Playgroud)

会打印10?

它打印10,但我预计它应该打印11

但是当我这样做的时候

x = ++x; instead of x = x++;
Run Code Online (Sandbox Code Playgroud)

它将按照我的预期打印11个,那么为什么x = x ++; 不改变x的值?

das*_*ght 16

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

以下是导致您所看到的事件的顺序:

  • x 被安排了 10
  • 由于++在后增量位置,存储x(即10)的当前值以供以后使用
  • 11存储的新值x
  • 临时值10存储回来x,写在11那里存储的那个.


bar*_*nus 5

Post Increment(n++):首先执行语句,然后将值加一。

Pre Increment (++n):先将值加一,然后执行语句。

例子:

class IncrementTest{
    public static void main(String[] args){

        System.out.println("***Post increment test***");
        int n = 10;
        System.out.println(n);      // output  10
        System.out.println(n++);    // output  10
        System.out.println(n);      // output  11

        System.out.println("***Pre increment test***");
        int m = 10;
        System.out.println(m);      // output  10
        System.out.println(++m);    // output  11
        System.out.println(m);      // output  11
    }
}
Run Code Online (Sandbox Code Playgroud)