为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2019-08-17 16:38:13
将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;
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

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;


查看完整回答
反对 回复 2019-08-17
?
繁星coding

TA贡献1797条经验 获得超4个赞

您无法将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希望在运行时确保类型安全。由于数组Objects可以是任何其他内容Integers,因此JVM必须执行上述代码正在执行的操作(单独查看每个元素)。语言设计者决定他们不希望JVM这样做(我不确定为什么,但我确定这是一个很好的理由)。

但是,您可以施放亚型阵列到阵列父(例如Integer[]Object[])!


查看完整回答
反对 回复 2019-08-17
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

或者执行以下操作:

...

  Integer[] integerArray = new Integer[integerList.size()];
  integerList.toArray(integerArray);

  return integerArray;}


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 1382 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信