zoukankan      html  css  js  c++  java
  • jvm:字节码(字节码角度分析a++与--a)

    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是先在槽位中进行自增操作,然后放到操作数栈中
  • 相关阅读:
    [ZJOI2014]力
    [八省联考2018]劈配
    [APIO2007]动物园
    [九省联考2018]IIIDX
    [HAOI2015]树上染色
    [SHOI2008]堵塞的交通
    暑假第五周
    暑假第四周
    暑假第三周
    暑假第二周
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13334838.html
Copyright © 2011-2022 走看看