Featured image of post i++ 与 ++i 的区别

i++ 与 ++i 的区别

i++ 表示先赋值,再自增 ++i 表示先自增,再赋值

  • 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++的底层解释(数据原子性)

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建 主题 StackJimmy 设计
发表了 33 篇文章・ 总计 66.74 k 字
本站总访问量 · 总访客数
本博客已稳定运行 🧡