圖解i++和++i

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
}

這裏寫圖片描述

發佈了118 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章