在Java数组中如何实现长度?

我想知道如何实现Java Array的length 。 我知道使用arrayName.length给了我们数组元素的数量,但想知道这是一个方法/函数,或者它只是数组的数据成员?

我想它必须是一个数据成员,因为我们在调用它时不使用括号() 。 但如果它是一个数据成员如何/何时分配/计算这个length的值?

根据Java语言规范(特别是§10.7数组成员 ),它是一个字段:

  • public final字段length ,其中包含数组的组成部分的数量(长度可能为正或零)。

内部值可能存储在对象头部的某处,但这是一个实现细节,取决于具体的JVM实现。

HotSpot虚拟机(在stream行的Oracle(以前称为Sun)JRE / JDK中) 将大小存储在对象头中 :

数组具有第三个头字段,用于数组大小。

你是对的, length是一个数据成员,而不是一个方法。

从数组教程 :

创build数组时创build数组的长度。 创build后,其长度是固定的。

如果您有一个已知types的数组或者是Object []的子类,那么您可以先数组。

 Object array = new ????[n]; Object[] array2 = (Object[]) array; System.out.println(array2.length); 

要么

 Object array = new char[n]; char[] array2 = (char[]) array; System.out.println(array2.length); 

但是,如果你不知道是什么types的数组,你可以使用Array.getLength(Object);

 System.out.println(Array.getLength(new boolean[4]); System.out.println(Array.getLength(new int[5]); System.out.println(Array.getLength(new String[6]); 

是的,这应该是一个领域。 我认为这个值是在创build数组的时候分配的(你必须在创build时select数组的长度,例如: int[] a = new int[5]; )。

我相信它只是一个财产,因为你访问它作为一个财产。

 String[] s = new String[]{"abc","def","ghi"} System.out.println(s.length) 

返回3

如果是一个方法,那么你会调用s.length()正确的?

从JLS:

数组的长度可用作最终实例variables长度

和:

一旦创build了一个数组对象,其长度永远不会改变。 要使数组variables引用不同长度的数组,必须将对不同数组的引用分配给该variables。

数组在JVM中实现。 您可能需要查看VM Spec以获取更多信息。

这是数组types的public final字段。 你可以参考下面的文档:

http://java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7

java中的每个数组都被认为是一个对象。 public final length是包含数组data member数的data memberlength可以是正数或零)

像C ++数组一样,Java数组具有固定的长度,在初始化之后,不能更改它。 但是,像C ++中的类模板vector – vector <T> – 可以使用Java类ArrayList ,它比Java数组具有更多的实用工具。