将Object数组转换为Integer数组错误

下面的代码有什么问题?

Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a; 

代码在最后一行有以下错误:

线程“main”中的exceptionjava.lang.ClassCastException:[Ljava.lang.Object; 不能投给[Ljava.lang.Integer;

Ross,你也可以使用Arrays.copyof()或Arrays.copyOfRange()。

 Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class); Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class); 

这里碰到一个ClassCastException的原因是你不能把一个Integer数组当作一个Object数组。 Integer[]Object[]的子types,但Object[]不是Integer[]

而下面也不会给出ClassCastException

 Object[] a = new Integer[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a; 

您不能将Object数组转换为Integer数组。 你必须遍历a的所有元素,并分别单独施放每个元素。

 Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = new Integer[a.length]; for(int i = 0; i < a.length; i++) { c[i] = (Integer) a[i]; } 

编辑:我相信这个限制背后的理由是,当投掷时,JVM希望确保在运行时types安全。 由于Objects的数组可以是除了Integers之外的任何东西,所以JVM将不得不做上面的代码做的事情(单独看每个元素)。 语言devise者决定他们不希望JVM做到这一点(我不知道为什么,但我相信这是一个很好的理由)。

但是,您可以将一个子types数组转换为超types数组(例如Integer[] to Object[] )!

或者执行以下操作:

 ... Integer[] integerArray = new Integer[integerList.size()]; integerList.toArray(integerArray); return integerArray; } 
 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

您尝试将一个对象数组转换为整型数组。 你不能这样做。 这种types的downcast是不允许的。

您可以创build一个Integer数组,然后将第一个数组的每个值复制到第二个数组中。