jvm:位元組碼(位元組碼角度分析a++與--a)
阿新 • • 發佈:2020-07-18
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是先在槽位中進行自增操作,然後放到運算元棧中