如何在Java Arrays中实现长度?

时间:2011-05-10 12:40:47

标签: java arrays

我想知道Java数组length的实现。我知道使用arrayName.length给出了数组中元素的数量,但是想知道这是一个方法/函数还是只是数组的数据成员?

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

9 个答案:

答案 0 :(得分:41)

根据Java语言规范(特别是§10.7 Array Members),它是一个字段:

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

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

HotSpot VM(流行的Oracle(以前称为Sun)JRE / JDK中的那个)stores the size in the object-header

  

[...]数组有第三个标题字段,用于数组大小。

答案 1 :(得分:18)

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

来自Arrays tutorial

  

创建数组时建立数组的长度。创建后,它的长度是固定的。

答案 2 :(得分:4)

如果你有一个已知类型的数组或者是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);

但是如果你不知道它是什么类型的数组,你可以使用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]);

答案 3 :(得分:1)

是的,它应该是一个领域。我认为在创建数组时会分配此值(您必须在创建时选择数组的长度,例如:int[] a = new int[5];)。

答案 4 :(得分:0)

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

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

返回3

如果这是一种方法,那么你可以调用s.length()吗?

答案 5 :(得分:0)

来自JLS:

  

数组的长度可用作a   最终实例变量长度

  

创建数组对象后,即可   长度永远不变。制作一个数组   变量引用的数组   不同长度,参考a   必须分配不同的数组   变量。

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

答案 6 :(得分:0)

它是数组类型的public final字段。您可以参考以下文档:

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

答案 7 :(得分:0)

java中的每个数组都被视为一个对象。 public final lengthdata member,其中包含数组的组件数(length可能为正数或零)

答案 8 :(得分:0)

Java数组(如C ++数组)具有固定长度,在初始化之后,您无法更改它。但是,就像类模板向量 - vector <T> - 在C ++中,您可以使用Java类ArrayList,它具有比Java数组更多的实用程序。