优秀的编程知识分享平台

网站首页 > 技术文章 正文

面试官:i++与++i有什么区别?(i––和––i的区别举例)

nanyue 2024-07-30 03:36:04 技术文章 9 ℃


我们经常会被问到i++与++i的区别,一般我们都会这样回答:i++表示,先返回再加1,++i表示,先加1再返回。但这只是宏观层面的,那它的底层是怎么样的呢? 我们一起探究下,这样我们可以更好地理解它,知其然并且知其所以然。

public class Test {
    public static void main(String[] args) {
        new Test().method1();
        new Test().method2();
    }
    public void method1(){
        int i = 1;
        int a = i++;
        System.out.println(a); //打印出结果是1
    }
    public void method2(){
        int i = 1;
        int a = ++i;
        System.out.println(a); //打印出结果是2
    }
}

反编译

javap -c Test.class

看下i++的反编译结果,最终是从本地的变量表中取出下标为2值为1的压入了栈中。

再看++i的反编译结果,最终是从本地变量表中取出下标为2值为2的压入了栈中。

总结

区别:

i++

  • 只是在本地变量中对数字做了相加,并没有将数据压入到操作栈
  • 将前面拿到的数字1,再次从操作栈中拿到,压入到本地变量中中

++i

  • 将本地变量中的数字做了相加,并且将数据压入栈
  • 将操作栈中的数据,再次压入到本地变量中

总之,对比我们可以看出两者之间最终都会在本地变量表中加一,只是最后入栈的值不一样而已,所以它们效率也是一样的。

Tags:

最近发表
标签列表