对象类中的长度字段

时间:2016-08-27 04:19:27

标签: java arrays object variable-length

很抱歉,如果之前有人问过此问题。我对Object类的长度字段有些怀疑。如果我错了,请纠正我,每个类都有一个impilcitly扩展Object类,这就是为什么我们可以访问所有方法,如equals,clone,hashcode等

所以我的问题是当我们为int [],foo []的示例数组创建任何数组时,我们可以访问Object类的长度字段,但是当我们创建任何对象时,我们看不到长度变量,为什么?

3 个答案:

答案 0 :(得分:5)

<script type="text/javascript"> $(document).ready(function () { $('#content1').load("http://fswsql279/ReportServer?%2fDepartment%2fSSC%2fInformation+Systems%2fMSC%2fAppAssets%2fSLMGauge&rs:Command=Render&rc:toolbar=false"); //$('#content2').load("http://fswsql279/ReportServer/Pages/ReportViewer.aspx?%2fDepartment%2fSSC%2fInformation+Systems%2fMSC%2fAppAssets%2fMscviewAnalyst&rs:Command=Render&rs:Format=HTML4.0"); }) </script> <script type="text/javascript"> $(document).ready(function () { $('#content2').load("http://fswsql279/ReportServer/Pages/ReportViewer.aspx?%2fDepartment%2fSSC%2fInformation+Systems%2fMSC%2fAppAssets%2fMscviewAnalyst&rs:Command=Render&rs:Format=HTML4.0"); }) </script> 类未定义Object字段,而length没有。{/ p>

{<1}}字段是为的数组类型定义的。 JLS州:

  

“在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2)。[...]数组的长度可用作为最终实例变量长度。“

长度字段是隐式定义的。没有Java API类声明,您可以在其中看到Object已定义。 length字段通常由“JVM magic”实现;例如在对象标题中。甚至还有一个特殊的字节码(field)来访问它。

  

...当我们创建任何对象时,我们看不到长度变量,为什么?

为什么呢?因为它没有一个!

答案 1 :(得分:2)

你必须注意“继承”的方向。您可能知道,“继承”是关于定义“是一种”关系。如果基类定义了字段,那么您可以在派生类中访问它们。

因此,在Java中,任何Integer 都是对象。或者,任何类型的数组都是对象。

反方向不是这样。任意对象一个数组!含义:如果您创建一个Object,就像使用bar = new Object()一样,那么 bar 就没有数组的任何属性;因为 bar 是一个对象;但不是数组。

因此,您在Object上找不到“length”,因为Object 不是数组

但是,当然,如果一个对象“真的”是其他东西,比如:

int[] numbers = { 1, 2, 3 };
Object foo = numbers;

然后你总是可以做一个演员,比如:

int[] anotherRefToNumbers = (int[]) foo;

编辑:只是为了给出不同的观点。如果你坐下来在一张纸上画一个圆圈;这个圆圈也是一个“形状”(无论你怎么称呼它)。但并不是每一个你可以画下来的形状都是一个圆圈。

答案 2 :(得分:-1)

根据我的理解,数组的长度是在初始化数组时设置的大小变量,它给出了数组的实际容量。初始化时无法更改数组的容量,因此Object []arr = new Object[2]; System.out.length(arr.length)工作正常。 public final字段长度,包含数组的组件数。长度可以是正数或零。