对象类中的长度字段

Fai*_*med 1 java arrays object variable-length

对不起,如果之前已经问过这个问题.我对Object类的长度字段有些怀疑.纠正我,如果我错了,每个类impilcitly扩展Object类,这就是为什么我们可以访问每个方法,如equals,clone,hashcode等

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

Ste*_*n C 5

Object类没有定义length字段和Object没有一个.

length字段被用于数组类型定义.该JLS状态:

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

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

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

为什么?因为它没有!

  • @FaisalAhmed在*动态*创建的数组类上.参见[JLS](https://docs.oracle.com/javase/specs/jls/se8/html/jls-10.html):*在Java编程语言中,数组是对象(§4.3.1),是动态创建,可以分配给`Object`类型的变量(§4.3.2).[...]数组的长度可用作`final`实例变量`length`.* (2认同)