对于 JVM 字段描述符,为什么使用 Z 表示布尔值,L 表示 class 的实例,而 J 表示 long?

For JVM Field Descriptor, why use Z for boolean, L for an instance of class, and J for long?

对于 Jvm 字段描述符,如此 link 所说: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.2

它用Z描述boolean类型,J代表long,L代表class实例。

有人知道为什么吗?

我的意思是我注意到B已经用byte了,但是为什么用Z来做boolean呢? 为啥不长用L,参考用R?

但是我不确定您是否会得到权威的答案。

  • J 有时在其他上下文中比 I 更宽,因为它是下一个字母(类似地,H 表示一半 int/short,或前一个字母我)
  • L 语言数据结构?
  • Z 表示不会用于任何其他用途的字母。 c.f。 Z 用于 "Zulu" 或 GMT 时间作为默认时间。

顺便说一句,他们可以使用 b 作为布尔值,因为 JVM 区分大小写。

如果你看字节码的细节,很多选择似乎是临时的,事后看来可能做得更好,但当时Java很新,根本不是清楚它会像现在一样受欢迎。