• i++ 表示的是先赋值,再自增
  • ++i 表示的是先自增,再赋值

当然还不止这些,先上一道自己踩过坑的题

public class Test {
    public static void main(String[] args){
        int i = 0;
        i = i++;
        System.out.println("i = " + i);
    }
}

这道题程序员都不会陌生,答案是i = 0;

可为什么会是0呢,这就需要了解 i++的底层到底是如何运算的。

模拟i++底层实现

i = i++;
-------------
int i = 0;
int temp = i;
i = i + 1;
i = temp;

可以看到i的值先是被赋给了一个临时变量,此时temp = 0,i 再进行自增1运算, i = 1,最后把temp的值赋给了i ;结果就是i = 0。

++i

public class Test {
    public static void main(String[] args){
        int i = 0;
        i = ++i;
        System.out.println("i = " + i);
    }
}

++i 就好理解一些了,先进行自增运算,再赋值。结果:

i = 1;

小技巧

最后贴一个关于如何区分i++与++i的小技巧,算是一个心得吧,希望对初学编程的人能够有所帮助。

​ i++是先赋值,再自增

​ ++i是先自增,再赋值

如何才能不混淆呢,你可以想象算式的左边有一个赋值号,i++ 想象成 = i++,然后利用“就近原则”,此时i与赋值号更近,所以先进行赋值的操作,再自增,同理,如果是++i 的话,+离赋值号更近,就先进行自增,再赋值。

参考资料

i++的底层解释(数据原子性)

Q.E.D.


The best thing you can do at work hard.