栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/695112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号