首页 > 其他 > 详细

jvm:字节码(字节码角度分析a++与--a)

时间:2020-07-18 14:15:15      阅读:33      评论:0      收藏:0      [点我收藏+]

1、源码和字节码

(1)源码

public class MyTest {
    public static void main(String[] args){
        int a=10;
        int b=a++ + ++a +a--;
        System.out.println(a);//11
        System.out.println(b);//34
    }
}

(2)字节码

技术分享图片

 

 

2、过程分析

(1)字节码指令分析

方法区:

技术分享图片

 

 第二步:

技术分享图片

 

 第三步:

技术分享图片

 

 iinc 1,1:将1号槽位的数据自增1

至此,a++执行完毕

第四步:++a

技术分享图片

 

 

将10和12存入操作数栈是为了做加法运算

第五步:操作数栈中的数据相加,弹出10和12,存入22

技术分享图片

 

 第六步:

技术分享图片

 

 iadd,iload_1:

将操作数栈中的数据相加

第七步:

技术分享图片

 

 第八步:iload_1,iload_2

技术分享图片

 

 

3、jvm角度分析a++与++a的区别

  • 在学习jvm之前对a++与++a的理解仅仅停留在a++是先输出a的数值在进行自增操作,相反++a是先进行自增操作再返回a的数值
  • 从jvm的角度来看,二者的区别是,a++是先将数据放到操作数栈中,再将数据放到相应的槽位在槽位中进行自增操作,相反,++a是先在槽位中进行自增操作,然后放到操作数栈中

 

jvm:字节码(字节码角度分析a++与--a)

原文:https://www.cnblogs.com/zhai1997/p/13334838.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!