Exception in thread "main" java.lang.ArrayStoreExceptionat java.lang.System.arraycopy(Native Method)at java.util.Arrays.copyOf(Arrays.java:3213)at java.util.Arrays$ArrayList.toArray(Arrays.java:3831)at com.itplh.TestDemo.main(TestDemo.java:164)
源代码
public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3); String[] array = list.toArray(new String[0]); for (String s : array) { System.out.println(s); }}
原因分析集合: 集中存储的数据类型是Intger
目标数组: 转换成的目标数组数据类型是String
在使用java.util.List#toArray(T[])
转换方法时,由于转换前后数据类型不一致,导致报错。
源码:java.lang.System#arraycopy
/** * ... * @exception ArrayStoreException if an element in the <code>src</code> * array could not be stored into the <code>dest</code> array * because of a type mismatch. */public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
解决方案调整转换前后的数据类型。
如,将
public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3); Integer[] array = list.toArray(new Integer[0]); for (Integer s : array) { System.out.println(s); }}
控制台输出:
123