为什么我可以将数组分配给对象引用
Object x = (Object) new int[] { 1, 2, 3 };// no error
Object y = new int[] { 1, 2, 3 };//no error
java数组是否从类继承类似于?
我希望这会给我一个编译时错误。
这样做:
System.out.println(x.toString() + " " + x.getClass().getName() + " " + x.getClass().getTypeName());
结果:
[I@15db9742 [I int[]
答案 0 :(得分:4)
在Java编程语言中,数组是对象(§4.3.1),是 动态创建,可以分配给Object类型的变量 (§4.3.2)。可以在数组上调用Object类的所有方法。
答案 1 :(得分:2)
java数组是否从类继承类似于?
是的,因为数组是类的实例,就像其他对象一样。这就是为什么他们有hashCode
和toString
以及getClass
,他们会从Object
继承它们。
来自JLS§10.1:
数组类型的超类型关系与超类关系不同。根据§4.10.3,
Integer[]
的直接超类型为Number[]
,但根据Integer[]
Object
对象,Class
的直接超类为Integer[]
1}}(§10.8)。这在实践中无关紧要,因为Object
也是所有数组类型的超类型。
(我的重点)
并且(或许相关)来自JLS§10.2:
数组类型的变量包含对象的引用。
答案 2 :(得分:0)
所有数组(原始数组或对象数组)都是对象。