鑒于指令istore_<n>及其文檔:n 必須是當前幀的局部變量數組的索引(第 2.6 節)。它沒有指定它從哪個索引開始。我假設為 0。對于給定的 istore 操作,它應該增加 1。給定一個簡單的類:public class TestingStuff { public static void main(String[] args) { int a = 11; int b = 12; } public static void test() { int c = 13; int d = 14; }}我希望這兩種方法有不同的框架。a那么這應該意味著存儲和的指令b將是istore_0和istore_1。c以及用于存儲和 的相同索引d。但由于某種原因,main方法中的索引從 開始1。這似乎總是如此。但我找不到任何有關原因的信息。javap 的輸出: public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=3, args_size=1 0: bipush 11 2: istore_1 3: bipush 12 5: istore_2 6: return public static void test(); descriptor: ()V flags: ACC_PUBLIC, ACC_STATIC Code: stack=1, locals=2, args_size=0 0: bipush 13 2: istore_0 3: bipush 14 5: istore_1 6: return是這樣嗎?如果是這樣,為什么?
1 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
靜態方法的參數作為從位置 0 開始的局部變量傳入。因此,對于,數組位于位置 0 的局部變量中。編譯執行某些操作的代碼應該可以證明這一點,盡管我沒有編譯器便利。main
args
args
(對于實例方法,this
位于位置 0,然后其余參數從位置 1 開始。)
添加回答
舉報
0/150
提交
取消