返回具有对象数组返回类型的 int 数组



我正在做这样的事情:

public Object [] getApple() {
return new int[4];
}

但是Java编译器不允许这样做。 它说不能从 int[] 转换为 Object[]。

虽然如果我做这样的事情:

public Object  getApple() {
return new int[4];
}

它编译得很好。 谁能解释为什么 int [] 不能隐式转换为对象 []?

int

不是Objects,这就是原因。它们是原始数据类型,它们扮演着特殊角色,并且不在具有全父Object的类树中。

第二个示例有效,因为int[]数组本身可以解释为Object


不过,您可以使用包装类Integer,它是Object的子类:

public Object[] getApple() {
return new Integer[4];
}

由于自动装箱,您可以像int[]一样使用它。所以如果你这样做

Integer[] values = (Integer[]) getApple();
values[1] = 5;

Java 会自动将5框到表示5的相应Integer对象中,然后将此Integer添加到数组中。

如果你这样做,也会发生同样的情况

int val = values[2];

Java 将从Integer对象中解开值的框,并为您提供int,因为val的类型为int

请注意,自动装箱不适用于数组,因此 Java 不会自动将您的int[]转换为Integer[]。它仅适用于intInteger,反之亦然(类似于其他原语,如double等)。

那是因为array是Java中的一个Object。因此,当您尝试将 int 数组作为 Object 返回时,它被接受了。

但是,当您尝试将int 数组作为 Object 数组返回时,它将被拒绝,因为当方法返回类型需要(对象数组)时,您返回的是 int 数组(对象)。

public Object[] getApple()    //expecting (array of object) 
{  
return new int[4];        //returning array (an object) Type mismatch!
}

如果运行以下命令,它将是可编译的:

public Object[] getApple()    //expecting (array of object) 
{  
return new int[4][4];     //returning array of array (array of object) O.K!
}

因为您返回的是一个原始的 int[] 数组,它不是 Object[] 的子类型。您可以改为返回 Integer[]。

数组具有特定的类型,子类的数组本身不是超类数组的子类。

相关内容

  • 没有找到相关文章

最新更新