Object[] objArray = new Object[]{new Integer("2")};
List<Object> list = Arrays.asList(objArray);
String[] strings = list.toArray(new String[list.size()]);
System.out.println(strings);
上面的代码会抛出异常吗?为什么?
执行之后抛出异常如下:
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays$ArrayList.toArray(Arrays.java:3833)
会调用到本地native方法
从这个注释可以看出,由于src和desc两个数组中的类型不匹配导致抛出了ArrayStoreException,因为在src中类型为Integer,而在desc为String,类型不匹配。
再查看详细注释说明:
可见如下几种情形都会抛出ArrayStoreException异常:
- src和desc都不是数组类型
- src和desc都是数组类型,但是数组元素类型是不同的基本类型数据
- src和desc中一个数组元素是引用数据类型,另一个是基本数据类型。
那么问题来了,如果两个都是引用数据类型,但是数组元素类型不一致呢?