圖解i++和++i

faicm發表於2017-03-16
public class Main{
    public void a(){
        int i=9;  //之所以用9,不用0或者1是為了區別索引值。
        int j=i;
    }
    public void b(){
        int i=9;
        int j=i++;
    }
    public void c(){
        int i=9;
        int j=++i;
    }
}



這段程式碼編譯後 javap -c Main.class 然後會生成

Compiled from "Main.java"
public class Main {
  public Main();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public void a();
    Code:
       0: bipush        9    //將常量9壓入棧頂。
       2: istore_1           //將棧頂元素彈出到本地區域性變數第一個。也就是把9賦值給i。
       3: iload_1//把本地區域性變數壓入棧頂。
       4: istore_2//把棧頂元素彈出到本地區域性變數第二個也就是j。
       5: return

  public void b();
    Code:
       0: bipush        9 //將常量9壓入棧頂。
       2: istore_1//將棧頂元素彈出到本地區域性變數第一個。也就是把9賦值給i。
       3: iload_1//把本地區域性變數壓入棧頂。
       4: iinc          1, 1//對本地第1個區域性變數進行加1操作。也就是把i變成了10.
       7: istore_2//把棧頂元素彈出到本地區域性變數第二個也就是j。
       8: return

  public void c();
    Code:
       0: bipush        9 //將常量9壓入棧頂。
       2: istore_1/將棧頂元素彈出到本地區域性變數第一個。也就是把9賦值給i。
       3: iinc          1, 1//對本地第1個區域性變數進行加1操作。也就是把i變成了10.
       6: iload_1//把本地區域性變數壓入棧頂。也就是10壓入棧頂。
       7: istore_2//把棧頂元素彈出到本地區域性變數第二個也就是j。
       8: return
}

這裡寫圖片描述

相關文章