首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组类在Java中是如何工作的?

数组类在Java中是如何工作的?
EN

Stack Overflow用户
提问于 2010-05-26 07:09:30
回答 4查看 4.8K关注 0票数 9

在Java中,数组是一个类并扩展对象。我很想知道这个特殊的数组类。我哪里都找不到类的定义。执行getClass().getName()会产生奇怪的结果。

代码语言:javascript
复制
String[] array = new String[]{"one","two"};
System.out.println(array.getClass().getName()); // prints [Ljava.lang.String;

我想了解数组是如何在引擎盖下工作的。JVM中是否硬编码了数组类定义?

任何有关这方面的资源、书籍、链接都是有帮助的。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-26 07:12:27

是的,基本上,数组是VM非常熟悉的东西,就像原始类型一样。有特定的字节码指令来处理数组--创建它们、索引到它们中等等。

至于寻找更多资源的问题,JVM规范可能是最好的起点。第7.9节有一些字节码处理数组的示例。

票数 9
EN

Stack Overflow用户

发布于 2010-05-26 07:46:06

关于数组类名

Class.getName清楚地指定了这些“时髦”数组名称:

如果该类对象表示非数组类型的引用类型,则返回类的二进制名称,正如Java语言规范第二版所指定的那样。 如果这个类对象表示原始类型或空白,那么返回的名称是一个String,等于对应于原语类型或void的Java关键字。 如果该类对象表示数组的类,则名称的内部形式由元素类型的名称组成,前面有一个或多个'['字符,表示数组嵌套的深度。元素类型名称的编码如下: 元素类型编码,布尔,Z,字节,B,C,双D浮点数,F,int,I,长J,短S类或接口Lclassname;

数组类成员

JLS 10.7数组成员

数组类型的成员如下:

  • public final field length,它包含数组的组件数(长度可以是正数或零)
  • public method clone,它在类Object中重写同名的方法,并且不引发检查的异常。
  • class Object继承的所有成员;唯一没有继承的Object方法是它的clone方法。

相关问题

票数 6
EN

Stack Overflow用户

发布于 2010-05-26 07:23:50

是的,JVM中有一个合成的Class,表示每个可能类型的数组(比如Integer[].class)。每个基元类型也有一个(如int[].class)。我不认为它有定义,像源文件,任何地方。它们的行为有点像预期的那样;例如,Number[].class可以从Integer[].class分配。

它没有特殊的方法,如果这是您的意思,也没有一个特殊的源文件。我甚至不认为数组类型所包含的length字段也被认为是在该类中定义的,尽管我承认我没有检查;这是VM所特有的。

JLS 10.8定义了这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2910774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档