Java 增量和赋值运算符

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

int x = 10;
x = x++;

sysout(x);

将打印 10 ?

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

但是当我这样做时

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

它将像我预期的那样打印十一个,那么为什么x = x ++;不改变 x 的值 ?


答案 1

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

以下是导致您所看到的内容的事件序列:

  • x已分配10
  • 由于在后增量位置,存储 (即 ) 的当前值以供以后使用++x10
  • 的新值被存储到11x
  • 的临时值被存储回 ,写在已经存储在那里的地方。10x11

答案 2

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

预增量 (++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
    }
}

推荐