繁体   English   中英

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

[英]Returning an int array with object array return type

我正在做这样的事情:

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

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

如果我做这样的事情:

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

它汇编得很好。 任何人都可以解释为什么int []不能隐式地转换为Object []?

int s不是Object ,这就是原因。 它们是原始数据类型 ,它们起着特殊的作用,并且不在具有全父 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 []。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM