编译下面的语句成功为什么?

时间:2013-06-30 19:26:14

标签: java scjp

我知道Object是java中所有类的最超级类。但是,在代码之下,我无法理解。请帮帮我。

Object c = new long[4];
Object d = new int[4];

4 个答案:

答案 0 :(得分:7)

  

在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2)。可以在数组

上调用Object类的所有方法

来自Java Language Specification

答案 1 :(得分:4)

如上所述,这会给你一个错误,因为你正在重新声明一个名为c的变量。但是,以下内容完全有效:

Object c = new long[4];
c = new int[4];

这很有效,因为正如你所说,Object是Java中所有非基本类型的超类。

答案 2 :(得分:2)

它编译,因为Java中的每个数组也是一个对象。

答案 3 :(得分:0)

Object是Java中的arrays超类(仅提到数组,因为问题要求如此)。

因此,当您为对象分配一个长数组时,它是内部类型转换为Object。

同样适用于int。所以在两个语句的最后,右边的变量是一个Object。但是,两行中都不能有Object c =