2013-04-05 77 views
3

在java字節碼中,「putfield」指令要求堆棧的頂端是一個值,堆棧的頂端1是引用。爲什麼它不是相反的?putfield參數順序

在我的講義中有人問我找不到答案。

+2

你看到任何理由爲什麼它應該是另一種方式? – 2013-04-05 07:14:43

+0

@BrunoReis自從putfield知道要存儲的值的大小,只要它以一致的方式完成,哪個參數在哪個位置應該無關緊要?我認爲這就像調用集會的約定,但我並不完全確定答案。爲什麼一種方法比另一種更安全? – 2013-04-05 07:17:14

+0

在我看來,這必須用AST字節碼的構造和遍歷方式來完成。不確定。我只是在黑暗中拍攝。 – vijay 2013-04-05 07:19:16

回答

1

順序實際上並不重要,因爲VM和編譯器可以以同樣簡單的方式實現。但是Sun選擇在棧上顯示較低的參數。

你可以看到這不僅與putfield,但與許多其他指令,如數組加載和存儲和方法調用。他們都遵守相同的慣例。我能想到的唯一解釋是這種方式更直觀。

如果您從左到右從底部到頂部讀出堆棧,則堆棧中的參數將具有與方法簽名或原始源代碼中的參數相同的順序。如果你想以另一種方式來實現,程序員必須在心理上將堆棧視爲反轉,這不是什麼大問題,但可能不那麼直觀。