public void calc(){
int i = 1;
i = i++;
System.out.println(i);
}
對應的字節(jié)碼指令如下:
calc:()V
000: iconst_1 {Lsample/HelloWorld;, .} | {}
001: istore_1 {Lsample/HelloWorld;, .} | {I}
002: iload_1 {Lsample/HelloWorld;, I} | {}
003: iinc 1 1 {Lsample/HelloWorld;, I} | {I}
004: istore_1 {Lsample/HelloWorld;, I} | {I}
005: getstatic System.out {Lsample/HelloWorld;, I} | {}
006: iload_1 {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;}
007: invokevirtual PrintStream.println {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;, I}
008: return {Lsample/HelloWorld;, I} | {}
public void calc(){
int i = 1;
i = ++i;
System.out.println(i);
}
對應的字節(jié)碼指令如下:
calc:()V
000: iconst_1 {Lsample/HelloWorld;, .} | {}
001: istore_1 {Lsample/HelloWorld;, .} | {I}
002: iinc 1 1 {Lsample/HelloWorld;, I} | {}
003: iload_1 {Lsample/HelloWorld;, I} | {}
004: istore_1 {Lsample/HelloWorld;, I} | {I}
005: getstatic System.out {Lsample/HelloWorld;, I} | {}
006: iload_1 {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;}
007: invokevirtual PrintStream.println {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;, I}
008: return {Lsample/HelloWorld;, I} | {}
iload
istore
image.png
iinc.png
//代碼
public void calc(){
int i = 1;
i = i++;
System.out.println(i);
}
//對應的字節(jié)碼指令如下
calc:()V
000: iconst_1 {Lsample/HelloWorld;, .} | {I}
001: istore_1 {Lsample/HelloWorld;, I} | {}
002: iload_1 {Lsample/HelloWorld;, I} | {I} //把局部變量表索引為1位置的值 放到操作數棧中 (操作數棧頂元素的值為 1)
003: iinc 1 1 {Lsample/HelloWorld;, I} | {I} //把局部變量表索引為1位置的值加1 (局部變量表該位置的值 i=2)
//棧頂元素彈棧并把值(棧頂元素的值為1)存到局部變量表索引為1的位置(局部變量表索引為1位置的值由2變?yōu)?)
004: istore_1 {Lsample/HelloWorld;, I} | {}
005: getstatic System.out {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;}
006: iload_1 {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;, I}
007: invokevirtual PrintStream.println {Lsample/HelloWorld;, I} | {}
008: return
//代碼
public void calc(){
int i = 1;
i = ++i;
System.out.println(i);
}
//對應的字節(jié)碼指令如下
calc:()V
000: iconst_1 {Lsample/HelloWorld;, .} | {I}
001: istore_1 {Lsample/HelloWorld;, I} | {}
002: iinc 1 1 {Lsample/HelloWorld;, I} | {} //把局部變量表索引為1位置的值加1 (i = 2)
003: iload_1 {Lsample/HelloWorld;, I} | {I}//把局部變量表索引為1位置的值放到操作數棧中(棧頂元素值為2)
//棧頂元素彈棧并把值(棧頂元素的值為2)存到局部變量表索引為1的位置(局部變量表索引為1位置的值由1變?yōu)?)
004: istore_1 {Lsample/HelloWorld;, I} | {}
005: getstatic System.out {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;}
006: iload_1 {Lsample/HelloWorld;, I} | {Ljava/io/PrintStream;, I}
007: invokevirtual PrintStream.println {Lsample/HelloWorld;, I} | {}
008: return