相信很多人寫了 Java 很久但是沒有看過 Java Compiler compiled 的 bytecode Java 官方提供指令 javap 來 disassemble 編譯好的 .class 這幫助我們在理解 Java compiler 與 Java Virtual Machine 的運作機制,是個方便的工具。
我們以常見的 i++, ++i 在 for 迴圈中是否有差別為例 如下方 Java 程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public  class  Test   {    public  static  void  main (String args[])   {         int  n = 5 ;         loop1(n);         loop2(n);     }     public  static  void  loop1 (int  n)   {         for  (int  i = 0 ; i < n; i++) {}     }     public  static  void  loop2 (int  n)   {         for  (int  i = 0 ; i < n; ++i) {}     } } 
使用 Java compiler compile Test.java 接著使用 javap 指令 印出 bytecode 的指令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 $ javap -c Test Compiled from "Test.java"  public class Test {   public Test();     Code:        0: aload_0        1: invokespecial         4: return    public static void main(java.lang.String[]);     Code:        0: iconst_5        1: istore_1        2: iload_1        3: invokestatic          6: iload_1        7: invokestatic         10: return    public static void loop1(int);     Code:        0: iconst_0        1: istore_1        2: iload_1        3: iload_0        4: if_icmpge     13        7: iinc          1, 1       10: goto          2       13: return    public static void loop2(int);     Code:        0: iconst_0        1: istore_1        2: iload_1        3: iload_0        4: if_icmpge     13        7: iinc          1, 1       10: goto          2       13: return  } 
我們可以看到 loop1, loop2 的迴圈內的指令是相同的 想要了解 bytecode 指令所代表的意思請參照下方網址
Java Virtual Machine 相關指令查詢 https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings  Reference: https://stackoverflow.com/questions/4831748/is-i-really-faster-than-i-in-for-loops-in-java