案发现场
Exception in thread "main" java.lang.ArrayStoreException
at 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);
}
}
控制台输出:
1
2
3
文章讲述了在Java编程中遇到ArrayStoreException异常的原因,该异常发生在尝试将不兼容类型的数据存入数组时。具体是由于集合(List)中的Integer类型数据转换为目标String数组时数据类型不匹配导致。解决方法是确保转换前后的数据类型一致,例如将目标数组类型改为Integer[]。修复后,程序能正确输出列表内容。

1462

被折叠的 条评论
为什么被折叠?



