鑒于指令istore_<n>及其文檔:n 必須是當(dāng)前幀的局部變量數(shù)組的索引(第 2.6 節(jié))。它沒有指定它從哪個(gè)索引開始。我假設(shè)為 0。對于給定的 istore 操作,它應(yīng)該增加 1。給定一個(gè)簡單的類: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那么這應(yīng)該意味著存儲和的指令b將是istore_0和istore_1。c以及用于存儲和 的相同索引d。但由于某種原因,main方法中的索引從 開始1。這似乎總是如此。但我找不到任何有關(guān)原因的信息。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貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
靜態(tài)方法的參數(shù)作為從位置 0 開始的局部變量傳入。因此,對于,數(shù)組位于位置 0 的局部變量中。編譯執(zhí)行某些操作的代碼應(yīng)該可以證明這一點(diǎn),盡管我沒有編譯器便利。main
args
args
(對于實(shí)例方法,this
位于位置 0,然后其余參數(shù)從位置 1 開始。)
添加回答
舉報(bào)
0/150
提交
取消