请参阅以下代码 -
class test {
public static void main(String args[]){
int[] somearray = {1, 2};
printarray(somearray);
}
static void printarray(Object[] array){
System.out.println(array[0]);
}
}
由于printarray
方法无法接受原始数组,因此上述代码无法编译。
或者这是一个自动拳击限制?如果是这样,那么我认为这是一个很大的限制。
答案 0 :(得分:4)
关于你的问题标题“数组真的是对象吗?”:是的,它们是。
关于您描述的问题:基本类型数组不是对象数组(因为int
不是java.lang.Object
)。
为了使您的代码有效,您可以像这样声明您的数组:
Integer[] somearray = {1, 2};
而不是使用原始类型int
。
请注意,有些拳击在这里生效。
答案 1 :(得分:0)
数组真的是对象吗?
数组是动态创建的对象,它们用作容纳(常量)相同类型对象的容器。看起来数组不像任何其他对象,这就是为什么它们被区别对待。
如果您将main
签名修改为
public static void main(String args[])
如果添加printarray(somearray)
,则无法编译,因为somearray
是包含int
的数组,其中printarray
(应该命名为printArray
)是一种接受Object
数组的方法。
您的问题有很多解决方案,其中一个正在将someArray
更改为Integer[]
类型。
答案 2 :(得分:0)
数组是Object
。实际上在java世界中,每个非原始类型都是Object.
因为你创建的每个类都直接或间接是Object (java.lang.Object)
的子类。
查看以下代码段 -
int[] intArray = new int[10];
Object anObject = intArray; //valid assignment
Object[] objArray = intArray; //invalid assignment.
此处intArray
本身就是Object
。因此可以使用Object
进行分配。但intArray
不是Object
的数组 - Object[]
。
因此,我们无法将intArray
分配给Object[]
。
答案 3 :(得分:0)
想到这个方式:
int不是Object
,而是primitive data type
int[]
与Object[]
不同
如果你想让printarray
方法保持不变,那么
您应该将somearray
更改为Integer
(表示整数的对象)
e.g。
Integer[] somearray = {1, 2};
printarray(somearray);