java 指令级别理解i++和++i
生活随笔
收集整理的這篇文章主要介紹了
java 指令级别理解i++和++i
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
idea安裝jclasslib(略)
執行過程
a++
代碼
打開jclasslib查看指令
看右邊的字節碼部分,
0 bipush 8 --> 把8這個值壓棧,就是先把8這個值壓入操作棧底部;
2 istore_1 -->把a這個本地變量存入本地變量表的1號位置,如如;
3 iload_1 -->把操作棧里的8彈棧給本地變量表里的a,此時a是8;
4 iinc 1 by 1 -->本地變量表的8遞增1,變成9;
7 istore_1 -->把操作棧里的值,此時還是8在給到本地變量表的1號位置,所以8給到1好位置;
8 getstatic -->(虛擬機里的調用,不重要,不管。)
11 iload_1 -->把操作棧里的8彈棧給本地變量表里的a,所以a是8;
12 invokevirtual -->(虛擬機里的調用,不重要,不管。)
15 return -->返回。
所以雖然做了++的操作,但是棧里的值仍然是8,所以返回8;
++a
看出來與a++的區別是,先iinc 1 by 1 了才iload_1,所以a就先遞增了才賦值到本地常量表。
所以a++是8,++a是9.
總結
以上是生活随笔為你收集整理的java 指令级别理解i++和++i的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑开机过程
- 下一篇: 指令级别解释对象创建过程和DCL为什么要