对于 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很新,根本不是清楚它会像现在一样受欢迎。
对于 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很新,根本不是清楚它会像现在一样受欢迎。