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
计算过程请自己思考。