Java 下面的语句编译成功的原因是什么?

Java 下面的语句编译成功的原因是什么?,java,scjp,Java,Scjp,据我所知,Object是java中所有类中最高级的类。但是,下面的代码我无法理解。请帮帮我 Object c = new long[4]; Object d = new int[4]; 它之所以编译,是因为Java中的每个数组也是一个对象。如前所述,这应该会给您一个错误,因为您正在声明一个名为c的变量。但是,以下内容完全有效: Object c = new long[4]; c = new int[4]; 这是因为,正如您所说,Object是Java中所有非基本类型的超类 在Java编程语言

据我所知,Object是java中所有类中最高级的类。但是,下面的代码我无法理解。请帮帮我

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

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

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

Object c = new long[4];
c = new int[4];
这是因为,正如您所说,Object是Java中所有非基本类型的超类

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


从中可以看出,

对象
是Java中
数组
的超类(仅提及数组,因为问题要求如此)

所以,当您将长数组指定给对象时,它在内部类型转换为object


类似于int。因此,在这两个语句的末尾,右边的变量是一个对象。但是,不能在两行中都有
对象c=

实际上,我知道int a[]=new int[10];这是可能的。上面的语句是如何编译的……因为一个
基元数组
是一个对象。@kocko你是对的,只想补充一点,不只是基元数组,Java中的每个数组都是对象。JLS=reputation magnet:D+1
object
是Java中每个类、数组、接口和枚举的超类,而不是“Java中的一切”。)是 啊是 啊我知道。他很匆忙你可以编辑。在电话里很难做到;在kocko的编辑之后,重新声明c问题不再存在