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

将Object数组转换为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;


慕慕森
浏览 1384回答 3
3回答

慕村225694

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;

繁星coding

您无法将Object数组转换为Integer数组。你必须循环遍历a的所有元素并单独抛出每个元素。Object[]&nbsp;a&nbsp;=&nbsp;new&nbsp;Object[1];Integer&nbsp;b=1;a[0]=b;Integer[]&nbsp;c&nbsp;=&nbsp;new&nbsp;Integer[a.length];for(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;a.length;&nbsp;i++){ &nbsp;&nbsp;&nbsp;&nbsp;c[i]&nbsp;=&nbsp;(Integer)&nbsp;a[i];}编辑:我相信这个限制背后的基本原理是,在进行转换时,JVM希望在运行时确保类型安全。由于数组Objects可以是任何其他内容Integers,因此JVM必须执行上述代码正在执行的操作(单独查看每个元素)。语言设计者决定他们不希望JVM这样做(我不确定为什么,但我确定这是一个很好的理由)。但是,您可以施放亚型阵列到阵列父(例如Integer[]到Object[])!

叮当猫咪

或者执行以下操作:... &nbsp;&nbsp;Integer[]&nbsp;integerArray&nbsp;=&nbsp;new&nbsp;Integer[integerList.size()]; &nbsp;&nbsp;integerList.toArray(integerArray); &nbsp;&nbsp;return&nbsp;integerArray;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java