java中i++ ++i位元組碼解釋
阿新 • • 發佈:2019-01-30
先上問題:
int i = 0; i = i++;int i = 0; i = ++i;
int i = 0; int j = 0; j = i+++i++;
int i = 0; int j = 0; j = i+++i+++i++;
運算後i和j的值分別是多少;
答案:i = 0;
i = 1;
i = 2,j = 1;
i = 3,j = 3
下面乾貨,先看i++在java位元組碼中是什麼樣的。
iconst指令將常量壓入棧中,0入棧;
istore_1將棧頂int型數值存入第一個區域性變數,i=0;
iinc指定int型變數增加指定值,i自身空間自加1。
所以最終i的值為1。
再附兩個jvm指令:iload 指定的int型區域性變數進棧。iadd 棧頂兩int型數值相加,並且結果進棧。
針對開篇問題分析:
int i = 0; i = i++; |
int i = 0; i = ++i; |
int i = 0; int j = 0; j = i+++i++; |
int i = 0; int j = 0; j = i+++i+++i++; |
|
位元組碼 |
|
|
|
|
分析 |
0、stack中存入常量0
|
0、stack中存入常量0
|
0、stack中存入常量0
|
0~12同場景三 |
運算結果 | i=0 | i=1 | i=2 j=1 | i=3 j=3 |
檢視java編譯位元組碼檔案使用命令:javap -c className
轉載請註明來源【IT黑名單】