檢查程序,是否存在問題,若是存在指出問題所在,若是不存在,說明輸出結果。this
public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); //這裏執行後 i==0 沒有異議 i = i++; // 注意這裏的執行:見下文 ##1 System.out.println(i); } void fermin(int i) { i++; } }
0: iconst_0索引
1: istore_1class
2: iload_1變量
3: iinc 1, 1引用
6: istore_1程序
7: iload_1方法
第0:將int類型的0入棧,就是放到操做數棧的棧頂static
第1:將操做數棧棧頂的值0彈出,保存到局部變量表 index (索引)值爲1的位置。co
(局部變量表也是從0開始的,0位置通常保存當前實例的this引用,固然靜態方法例外,由於靜態方法是類方法而不是實例方法)new
第2:將局部變量表index 1位置的值的副本入棧。(這時局部變量表index爲1的值是0,操做數棧頂的值也是0)
第3:iinc是對int類型的值進行自增操做,
後面第一個數值1表示,局部變量表的index值,說明要對此值執行iinc操做,
第二個數值1表示要增長的數值。
(這時局部變量表index爲1的值由於執行了自增操做變爲1了,可是操做數棧中棧頂的值仍然是0)
第6:將操做數棧頂的值彈出(值0),放到局部變量表index爲1的位置(舊值:1,新值:0),覆蓋了上一步局部變量表的計算結果。
第7:將局部變量表index 1位置的值的副本入棧。(這時局部變量表index爲1的值是0,操做數棧頂的值也是0)