为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

这个问题基本上是不言自明的。我无法找到数组的API(除了这个数组,但这只是定义了一堆用于处理实际数组的静态辅助函数)。如果没有它的类,这似乎表明一个数组不能是一个Object。但是,一个数组具有公共字段length和它可以调用的方法这样的事实,.equals()并且.clone()似乎(非常强烈地)建议完全相反。对于原始数组的奇怪表示和行为有什么解释?作为一个注释,我试着在.clone()刚才的数组方法上使用“Open Implementation”Eclipse特性,希望我能够看看这个方法的定义位置和方法(因为它说int []覆盖了它对象),但它实际上导致我的整个Eclipse冻结并崩溃......
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-09-02
?
哔哔one

TA贡献1854条经验 获得超8个赞

在Java语言规范应该给你一个想法:


数组类型的直接超类是Object。


每种数组类型都实现了接口Cloneable和java.io.Serializable。


而且:


对象是类实例或数组。


因此数组不是实例,因此您不需要构造函数来创建它们。而是使用阵列创建表达式。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 769 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信