这个问题基本上是不言自明的。我还没有找到数组的 API(除了这个 Arrays ,但这只是定义了一堆用于处理实际数组的静态辅助函数)。如果它没有类,这似乎表明数组不能是 Object
。
然而,数组具有像 length
这样的公共(public)字段以及它可以调用的方法,如 .equals()
和 .clone()
似乎(非常强烈地)建议完全相反。
原始数组的奇怪表示和行为的解释是什么?
作为说明,我刚才尝试在数组的 .clone()
方法上使用“Open Implementation” Eclipse 功能,希望我能够查看在哪里以及如何这个方法是定义的(因为它说 int[] 从 Object 覆盖它),但它实际上导致我的整个 Eclipse 卡住并崩溃......
最佳答案
每个数组类型都有一个类,所以 int[]
有一个类,Foo[]
有一个类。这些类是由 JVM 创建的。您可以通过 int[].class
、Foo[].class
访问它们。这些类的直接父类(super class)是Object.class
public static void main(String[] args)
{
test(int[].class);
test(String[].class);
}
static void test(Class clazz)
{
System.out.println(clazz.getName());
System.out.println(clazz.getSuperclass());
for(Class face : clazz.getInterfaces())
System.out.println(face);
}
还有一个编译时子类型规则,如果A
是B
的子类型,A[]
是B的子类型[]
.
关于java - 数组是原始类型还是对象(或完全是其他东西)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806739/