我是Java Bytecode中的新手。我通過一些例子來理解字節碼,但我陷入了一個例子。
這是我的Java和字節碼文件Java字節碼的不同行爲
class SimpleAdd{
public static void main(char args[]){
int a,b,c,d;
a = 9;
b = 4;
c = 3;
d = a + b + c;
System.out.println(d);
}
}
Compiled from "SimpleAdd.java"
class SimpleAdd extends java.lang.Object{
SimpleAdd();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(char[]);
Code:
0: bipush 9
2: istore_1
3: iconst_4
4: istore_2
5: iconst_3
6: istore_3
7: iload_1
8: iload_2
9: iadd
10: iload_3
11: iadd
12: istore 4
14: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
17: iload 4
19: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
22: return
}
我只是想知道爲什麼會出現bipush 9時,我們有指令= 9
而在所有其他情況下,有ICONST。
'bipush 9'將整數文字9壓入堆棧。 'istore_1'將該值存儲到局部變量#1中。 'iconst_4'將一個文字4壓入堆棧,並且在一個字節中對'bipush'執行一個字節,但是隻有'iconst_1'到'iconst_5'字節碼 - 沒有'iconst_9'。 – 2012-08-04 20:31:59