【问题标题】:Java - Assigning an array to an object reference [duplicate]Java - 将数组分配给对象引用[重复]
【发布时间】:2015-08-16 18:07:13
【问题描述】:

为什么我可以将数组分配给对象引用

Object x = (Object) new int[] { 1, 2, 3 };// no error
Object y = new int[] { 1, 2, 3 };//no error

java数组是否像类一样从Object继承?

我预计这会给我一个编译时错误。

这样做:

System.out.println(x.toString() + " " + x.getClass().getName() + " " + x.getClass().getTypeName());

结果:

[I@15db9742 [I int[]

【问题讨论】:

    标签: java arrays object


    【解决方案1】:

    根据official tutorial

    在 Java 编程语言中,数组是对象(第 4.3.1 节),是 动态创建,并且可以分配给 Object 类型的变量 (§4.3.2)。 Object 类的所有方法都可以在数组上调用。

    【讨论】:

      【解决方案2】:

      java数组是否像类一样从Object继承?

      是的,因为数组是类的实例,就像其他对象一样。这就是为什么他们有hashCodetoStringgetClass,他们从Object 继承它们。

      来自JLS§10.1

      数组类型的超类型关系与超类关系不同。根据 §4.10.3,Integer[] 的直接超类是 Number[],但根据 Integer[](第 10.8 节)的 Class 对象,Integer[] 的直接超类是 Object。这在实践中并不重要,因为Object 也是所有数组类型的超类型

      (我的重点)

      并且(可能相关)来自JLS§10.2

      数组类型的变量保存对对象的引用。

      【讨论】:

        【解决方案3】:

        所有的数组(原始数组或对象数组)都是对象。

        【讨论】:

          猜你喜欢
          • 2016-02-03
          • 2016-10-22
          • 2016-05-16
          • 2010-11-22
          • 2017-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-01
          相关资源
          最近更新 更多