我想知道Java数组length
的实现。我知道使用arrayName.length
给出了数组中元素的数量,但是想知道这是一个方法/函数还是只是数组的数据成员?
我想它必须是数据成员,因为我们在调用它时不使用括号()
。但是,如果它是数据成员,那么length
分配/计算的值是什么/何时?
答案 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)
答案 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 length
是data member
,其中包含数组的组件数(length
可能为正数或零)
答案 8 :(得分:0)
Java数组(如C ++数组)具有固定长度,在初始化之后,您无法更改它。但是,就像类模板向量 - vector <T>
- 在C ++中,您可以使用Java类ArrayList
,它具有比Java数组更多的实用程序。