猿问

数组是原始类型还是对象(或其他完全不同的东西)?

这个问题基本上是不言自明的。我无法找到数组的API(除了这个数组,但这只是定义了一堆用于处理实际数组的静态辅助函数)。如果没有它的类,这似乎表明一个数组不能是一个Object。


但是,一个数组具有公共字段length和它可以调用的方法这样的事实,.equals()并且.clone()似乎(非常强烈地)建议完全相反。


对于原始数组的奇怪表示和行为有什么解释?


作为一个注释,我试着在.clone()刚才的数组方法上使用“Open Implementation”Eclipse特性,希望我能够看看这个方法的定义位置和方法(因为它说int []覆盖了它对象),但它实际上导致我的整个Eclipse冻结并崩溃......


慕尼黑的夜晚无繁华
浏览 778回答 3
3回答

慕莱坞森

每个数组类型都有一个类,所以有一个类int[],有一个类Foo[]。这些类由JVM创建。你可以通过int[].class,访问它们Foo[].class。这些类的直接超类是Object.classpublic 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[]。

哔哔one

在Java语言规范应该给你一个想法:数组类型的直接超类是Object。每种数组类型都实现了接口Cloneable和java.io.Serializable。而且:对象是类实例或数组。因此数组不是实例,因此您不需要构造函数来创建它们。而是使用阵列创建表达式。
随时随地看视频慕课网APP
我要回答