为什么“ a”是对象引用的Java字节码前缀?

FTh*_*son 5 java bytecode instructions

特定于类型的Java字节码指令具有单字符前缀以指定该指令所涉及的类型。

在此处输入图片说明 摘自Wikipedia关于Java字节码的条目

在每种情况下,前缀选择都是有意义的,它由该类型的第一个字母组成(布尔型除外,布尔型没有指令前缀)。但是,对象引用前缀似乎不合逻辑,因为o和和r(两个第一字母)都是免费的。相反,对象引用指令a用作其前缀。

对象引用字节码指令为什么前缀a,而不是貌似更合适o还是r

Hol*_*ger 3

那个表有问题。没有字节码指令处理,boolean因此没有以 \xe2\x80\x9cz\xe2\x80\x9d 开头的指令名称。\xe2\x80\x9cz\xe2\x80\x9d 可能来自类型签名 whereZ代表boolean,但 \xe2\x80\x99s 与类型签名不同代表Jlong开始L类名。所以\xe2\x80\x99s 那里没有一致性。对于指令 \xe2\x80\x9ca\xe2\x80\x9d 可能代表地址,因为astore指令也能够将返回地址存储到局部变量中。也许,在早期,更多的 a\xe2\x80\xa6 指令能够处理除对象之外的地址,并且后来受到了限制。

\n