最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 System.arraycopy 出现 ArrayStoreException 报错如何排查
时间:2026-07-20 18:04:48 编辑:袖梨 来源:一聚教程网
ArrayStoreException 表明尝试将不兼容类型的元素复制到引用类型数组中,System.arraycopy 在运行时严格检查类型兼容性;常见于源数组实际元素类型无法赋值给目标数组组件类型,如将 Integer[] 复制到 String[],或误用 list.toArray() 返回的 Object[] 直接复制到 String[];该异常仅发生在引用类型数组间,基本类型数组复制不会触发。
出现 ArrayStoreException 说明你正在尝试把不兼容类型的元素复制进目标数组,而 System.arraycopy 在运行时做了类型检查并拒绝了该操作。
确认源数组和目标数组的组件类型是否兼容
这是最常见原因:目标数组是某个类或接口的数组(比如 String[]、Number[]),但源数组里存在无法赋值给该类型的对象(比如把 Integer 往 String[] 里复制)。Java 数组是协变的,但类型检查在复制时严格进行。
- 检查源数组声明类型(如
Object[] src = new Integer[3];)和目标数组声明类型(如String[] dst = new String[3];) - 即使源数组实际元素都是
String,若其编译时类型是Object[],而目标为String[],复制仍可能失败——关键看运行时目标数组的组件类型能否接受源元素的实际类型 - 一个典型例子:
Object[] src = {new Integer(1)}; String[] dst = new String[1]; System.arraycopy(src, 0, dst, 0, 1);→ 直接抛出ArrayStoreException
注意泛型擦除与 Object[] 的陷阱
使用集合转数组时容易踩坑,例如 list.toArray() 返回的是 Object[],如果直接复制到具体类型数组中,JVM 会在运行时校验每个元素是否可存入目标类型。
- 错误写法:
String[] arr = new String[list.size()]; System.arraycopy(list.toArray(), 0, arr, 0, list.size()); - 正确做法:用带参数的
toArray(T[])方法,如String[] arr = list.toArray(new String[0]);,它会返回真正String[]类型的数组 - 若必须用
arraycopy,确保源数组的运行时类型与目标一致,例如先用Arrays.copyOf或显式转型(需保证安全)
检查是否误用了基本类型数组与引用类型数组
ArrayStoreException 只发生在引用类型数组之间。如果你看到这个异常,说明至少有一个参数是引用类型数组(如 String[]、Integer[]),而不是 int[]、double[] 等基本类型数组。
立即学习“Java免费学习笔记(深入)”;
- 基本类型数组之间复制不会抛
ArrayStoreException(但可能有ArrayIndexOutOfBoundsException或类型不匹配导致静默截断) - 混合使用时要特别小心:比如把
Integer[]复制到Number[]是合法的(因为Integer是Number子类),但复制到String[]就非法 - 可通过
src.getClass().getComponentType()和dst.getClass().getComponentType()打印对比确认
调试建议:快速定位问题元素
异常堆栈通常不指出是第几个元素出错,但你可以手动模拟校验逻辑缩小范围。
- 在调用
arraycopy前加一层循环检查:for (int i = 0; i - 或者用 IDE 调试模式,停在异常前观察
src[i]的实际类型和dst的组件类型 - 日志中打印
src.getClass().getName()和dst.getClass().getName(),比如[Ljava.lang.String;表示String[],[Ljava.lang.Object;表示Object[]
相关文章
- WNACG绅士仓库网页版最新入口 - 2026可用官网地址 07-21
- deepseek官网-入口地址 07-21
- AdobeReaderXI怎么用?-AdobeReaderXI怎么设置中文? 07-21
- 漫蛙在哪儿下载安装-漫蛙APP免费正版下载新版入口 07-21
- 风之痕迹魔武加护怎么做 魔武加护方法详细介绍 07-21
- hive 主键能删除吗 07-21