在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 member
( length
可以是正数或零)
像C ++数组一样,Java数组具有固定的长度,在初始化之后,不能更改它。 但是,像C ++中的类模板vector – vector <T>
– 可以使用Java类ArrayList
,它比Java数组具有更多的实用工具。