list.toArray的坑

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)

list.toArray的坑_第1张图片
会调用到本地native方法
list.toArray的坑_第2张图片
list.toArray的坑_第3张图片
从这个注释可以看出,由于src和desc两个数组中的类型不匹配导致抛出了ArrayStoreException,因为在src中类型为Integer,而在desc为String,类型不匹配。

再查看详细注释说明:
list.toArray的坑_第4张图片
可见如下几种情形都会抛出ArrayStoreException异常:

  1. src和desc都不是数组类型
  2. src和desc都是数组类型,但是数组元素类型是不同的基本类型数据
  3. src和desc中一个数组元素是引用数据类型,另一个是基本数据类型。

那么问题来了,如果两个都是引用数据类型,但是数组元素类型不一致呢?
list.toArray的坑_第5张图片

你可能感兴趣的:(java8,java)