将对象数组转换为整数数组错误
以下代码有什么问题?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
代码在最后一行有以下错误:
线程 “main” java.lang.ClassCastException 中的异常: [Ljava.lang.Object; 不能被强制转换为 [Ljava.lang.Integer;
以下代码有什么问题?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
代码在最后一行有以下错误:
线程 “main” java.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[]
Object[]
Integer[]
而下面的也不会给出.ClassCastException
Object[] a = new Integer[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
不能将数组强制转换为数组。您必须遍历 a 的所有元素,并单独转换每个元素。Object
Integer
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希望确保运行时的类型安全。由于数组可以是除此以外的任何东西,因此 JVM 必须执行上述代码正在执行的操作(单独查看每个元素)。语言设计师决定他们不希望JVM这样做(我不知道为什么,但我相信这是一个很好的理由)。Objects
Integers
但是,您可以将子类型数组转换为超类型数组(例如 到 )!Integer[]
Object[]