1. 程式人生 > 實用技巧 >jvm:位元組碼(位元組碼角度分析a++與--a)

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是先在槽位中進行自增操作,然後放到運算元棧中