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

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

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从 *** 作数栈取值

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5695257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存