b站尚硅谷javase面试题:自增变量 笔记

关于局部变量表和操作数栈就不多讲了,网上有很多内容

 

这里关于a++和++a编译成字节码后的区别做一下测试:

 这是int b = a++

int a = 1;

int b = a++;得到字节码

Code:
       0: iconst_1         //将常量1入操作数栈
       1: istore_1          //从操作数栈顶取值,放入局部变量表编号为1的位置 

-------以上字节码完成了对a=1的赋值

       2: iload_1           //将局部变量表中编号为1的位置加载到操作数栈栈顶--->栈顶=1

       3: iinc          1, 1      //局部变变量表编号为1的位置直接+1
       6: istore_2              //从操作数栈顶取值,放入局部变量表编号为2的位置 -->也就是把1赋给局部变量b


       7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      10: iload_2
      11: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
      14: return

--------------------------------------------------------分割线--------------------------------------------------------------

int a = 1;

int b = ++a;得到字节码
    Code:
       0: iconst_1
       1: istore_1
       2: iinc          1, 1
       5: iload_1
       6: istore_2

       7: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      10: iload_2
      11: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
      14: return

注意颜色标注的那几行

这里直接给结论:

b=a++是将a的值先入操作数栈,然后局部变量表的a自增局部变量表的b从操作数栈取值

b=++a是局部变量表a先自增,然后局部变量表a的值入栈局部变量表的b从操作数栈取值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大象荒野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值