2013-09-27 66 views
3

特定於類型的Java字節碼指令具有單字符前綴來指定指令所涉及的類型。爲什麼'a'是對象引用的Java字節碼前綴?

enter image description here Wikipedia's entry on Java bytecode

採取每種情況下,前綴選擇是有道理的,由該類型的第一個字母(除布爾值,它不具有指令前綴)。然而,對象引用前綴似乎並不合邏輯,因爲or(兩個首字母)都是空閒的。相反,對象參考指令使用a作爲它們的前綴。

爲什麼對象引用字節碼指令前綴爲a,而不是看起來更合適的or

+2

一個有趣的問題,可以肯定,但有點「猜他們在想什麼」類型的問題,這可能不適合本網站。 –

+3

這個問題似乎是無關緊要的,因爲它是關於閱讀Java開發人員的想法。 – Antimony

+0

也許是像HTML一樣的** a nchor。 –

回答

1

該表值得懷疑。沒有字節碼指令處理boolean,因此沒有以「z」開頭的指令名稱。 「z」可能來自類型簽名,其中Z代表boolean,但這不同於類型簽名J代表longL開始類名稱。所以這裏沒有一致性。對於指令「a」可能代表地址,因爲astore指令也能夠將返回地址存儲到本地變量中。也許,在更早的時候,更多的這些...指令能夠處理除對象之外的地址,並且以後受到限制。

+0

非常真實,我沒有想到這一點;我只是從維基百科彈出表格。我非常喜歡「a」含義地址的概念,因爲對象引用本質上是指內存地址。 – Vulcan

1

這可能是因爲r指的是JVM在內部使用的returnAddress類型。

+0

好主意,使用'r'避免使用'returnAddress'確實是合理的。 – Vulcan

相關問題