【Exception】Exception in thread “main“ java.lang.ArrayStoreException

文章讲述了在Java编程中遇到ArrayStoreException异常的原因,该异常发生在尝试将不兼容类型的数据存入数组时。具体是由于集合(List)中的Integer类型数据转换为目标String数组时数据类型不匹配导致。解决方法是确保转换前后的数据类型一致,例如将目标数组类型改为Integer[]。修复后,程序能正确输出列表内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案发现场

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值