i++ 和 ++i 的区别

先说运算规则吧。

i++ 是先赋值后自增;++i 是先自增后赋值。

以下是代码示例:

int a=0;
int b=0;
int i=0;

a=i++;

System.out.println("a的值为:"+a);
System.out.println("i的值为:"+i);

b=++i;

System.out.println("b的值为:"+b);
System.out.println("i的值为:"+i);

运行结果为:

a的值为:0
i的值为:1
b的值为:2
i的值为:2

 

i++是先赋值后自增,所以 a=i++ 可以分解为两步,先运算 a=i ;再运算 i=i+1;所以a的值为0,i 的值为1。

++i是先自增后赋值,所以 b=++i 可以分解为两步,先运算 i=i+1;再运算 b=i ;所以b的值为2,i 的值为2。

 

再看一下比较绕的情况:

public static void main(String[] args) {

        int a=0;
        int i=0;

        i=i++;
        i=i++;
        i=i++;
        i=i++;
        i=i++;

        System.out.println("i的值为:"+i);

        a=++a;
        a=++a;
        a=++a;
        a=++a;
        a=++a;

        System.out.println("a的值为:"+a);

    }

 

你能准确的说出 i 和 a 的值吗?

 

代码运行结果如下:

i的值为:0
a的值为:5

是不是 i 的值很令人迷糊?

a 的值很好解释,++a是先自增后赋值,所以 a = ++a 等价于 a=a+1 ; a=a ;运算后 a 的值为1,以此类推,最后 a 的值为5。

但 i 的值就不符合我之前的计算了,i++ 是先赋值后运算,所以 i=i++ 可以拆分为 i=i;i=i+1;运算后,i 的值应该也为1,以此类推,最后 i 的值应该也为5才对,但最后的运算结果为0,这就很令我迷糊了。

 

请看下面这种解释:

初始 i 的值为0,i=i++ 时,i=0 这个值先进寄存器,然后 i 的值自增1,但在最后赋值的时候,寄存器中的值0会覆盖 i 新增后的值1成为最终结果,所以无论计算多少次,最后的结果都是为 0 。

 

请看下面这个例子

public static void main(String[] args) {

        int i=0;
        int a=0;
        i=i++ + ++i;   
        a=++a + a++; 

        System.out.println("i的值为:"+i);
        System.out.println("a的值为:"+a);

    }

 

结果如下:

i的值为:2
a的值为:2

计算过程请自己思考。

 

posted @ 2018-12-18 14:03  ____Peanut  阅读(418)  评论(0编辑  收藏  举报