数组真的是对象吗?

时间:2015-04-30 15:20:25

标签: java arrays oop object

请参阅以下代码 -

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方法无法接受原始数组,因此上述代码无法编译。 或者这是一个自动拳击限制?如果是这样,那么我认为这是一个很大的限制。

4 个答案:

答案 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);