以下代码有什么问题?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
Run Code Online (Sandbox Code Playgroud)
代码在最后一行有以下错误:
线程"main"中的异常java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.Integer;
nam*_*olk 90
Ross,你也可以使用Arrays.copyof()或Arrays.copyOfRange().
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class);
Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);
Run Code Online (Sandbox Code Playgroud)
这里击中的原因ClassCastException是你不能将数组Integer视为数组Object.Integer[]是一个子类型Object[]但Object[]不是Integer[].
以下也不会给出一个ClassCastException.
Object[] a = new Integer[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
Run Code Online (Sandbox Code Playgroud)
Sea*_*ean 21
您无法将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];
}
Run Code Online (Sandbox Code Playgroud)
编辑:我相信这个限制背后的基本原理是,在进行转换时,JVM希望在运行时确保类型安全.由于数组Objects可以是任何其他内容Integers,因此JVM必须执行上述代码正在执行的操作(单独查看每个元素).语言设计者决定他们不希望JVM这样做(我不确定为什么,但我确定这是一个很好的理由).
但是,您可以施放亚型阵列到阵列父(例如Integer[]到Object[])!
Mic*_*ael 14
或者执行以下操作:
...
Integer[] integerArray = new Integer[integerList.size()];
integerList.toArray(integerArray);
return integerArray;
}
Run Code Online (Sandbox Code Playgroud)
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
Run Code Online (Sandbox Code Playgroud)
您尝试将对象数组转换为整数数组。你不能这样做。这种类型的向下转型是不允许的。
您可以创建一个整数数组,然后将第一个数组的每个值复制到第二个数组中。