数组类如何在Java中工作?

oks*_*s16 7 java arrays jvm

在Java中,array是一个类并扩展了Object.我很想知道这个特殊的数组类.我没有在任何地方找到类定义.执行getClass().getName()会得到奇怪的结果.

String[] array = new String[]{"one","two"};
System.out.println(array.getClass().getName()); // prints [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)

我想了解阵列是如何工作的.数组类定义是否在JVM中进行了硬编码?

任何资源,书籍,链接都会有所帮助.

谢谢.

Jon*_*eet 8

是的,基本上数组是VM密切关注的东西,比如原始类型.有一些特定的字节码指令可用于数组 - 创建它们,索引它们等.

至于资源以了解更多 - JVM规范可能是最好的起点.第7.9节有一些使用数组的字节码示例.


pol*_*nts 6

关于数组类名

Class.getName 清楚地指定这些"时髦"的数组名称:

如果此类对象表示不是数组类型的引用类型,则返回类的二进制名称,如Java语言规范第二版所指定.

如果此类对象表示基本类型或void,则返回的名称String等于与基本类型对应的Java语言关键字或void.

如果此类对象表示一个数组类,则名称的内部形式由元素类型的名称组成,前面是一个或多个'['表示数组嵌套深度的字符.元素类型名称的编码如下:

Element Type        Encoding
boolean             Z
byte                B
char                C
double              D
float               F
int                 I
long                J
short               S 
class or interface  Lclassname;
Run Code Online (Sandbox Code Playgroud)

关于数组类成员

JLS 10.7阵列成员

数组类型的成员是以下所有成员:

  • public final field length,其中包含所述阵列的组件的数量(长度可以是正的或零)
  • public method clone,它会覆盖类同名的方法Object,并没有抛出checked异常
  • 所有成员都继承自class Object; 唯一Object没有继承的clone方法是它的方法

相关问题