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

标签 java arrays object primitive

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

然而,数组具有像 length 这样的公共(public)字段以及它可以调用的方法,如 .equals().clone() 似乎(非常强烈地)建议完全相反。

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

作为说明,我刚才尝试在数组的 .clone() 方法上使用“Open Implementation” Eclipse 功能,希望我能够查看在哪里以及如何这个方法是定义的(因为它说 int[] 从 Object 覆盖它),但它实际上导致我的整个 Eclipse 卡住并崩溃......

最佳答案

每个数组类型都有一个类,所以 int[] 有一个类,Foo[] 有一个类。这些类是由 JVM 创建的。您可以通过 int[].classFoo[].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);
}

还有一个编译时子类型规则,如果AB的子类型,A[]B的子类型[].

关于java - 数组是原始类型还是对象(或完全是其他东西)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806739/

相关文章:

javascript - JSON Stringify 正在将对象数组的值设置为空的对象键

javascript - 按匹配的对象字段数对对象数组进行排序

delphi - 共享事件处理程序如何知道它正在处理哪个控件的事件?

java - 对象的大小取决于它读取的内容

Java Swing 表单,无法在新添加的 jtextfield 中键入文本

java - 如何重复直到用户输入一个整数?

java - 如何将字符串数组转换为唯一值数组?

java - Movilizer:我可以自动显示数字键盘并绕过“确定”按钮吗?

java - SWT中如何设置MenuItem的字体大小?

java - 从另一个 Activity 编辑数组