java i++和++i的区别_面试官:i++与++i有什么区别?

58ece946e5e268815e84af7c03f9e5f2.png

我们经常会被问到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的压入了栈中。

0fc76b5f802ca6a907b2c6da63d28773.png

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

9803608416ced7fb7feb33402f26d52f.png

总结

区别:

i++

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

++i

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值