为什么以下代码抛出ArrayStoreException
?
double[] a = {2.0,3.4,3.6,2.7,5.6};
int[] b = {2,3,4,5};
System.arraycopy(b,0,a,1,4);
答案 0 :(得分:11)
来自System.arraycopy
的文档:
否则,如果是以下任何一种情况 如果是,则抛出ArrayStoreException 并且目的地未被修改:
[...]
src参数和dest参数 引用其组件类型的数组 是不同的原始类型。
这就是这里的情况 - int
和double
是不同的基本类型,因此会记录异常。
arraycopy
的要点是,通过盲目复制原始数据可以快速地工作,而无需应用任何转换。在您的情况下,将必须应用转换,因此失败。
答案 1 :(得分:3)
是的,这是在具有不同基元类型作为组件的数组之间arraycopy
的记录行为。这种类型是否可以正常推广是不相关的;这就是arraycopy
的目的。
答案 2 :(得分:0)
尝试双** [] ** a = {2.0,3.4,3.6,2.7,5.6}; 和 int ** [] ** b
答案 3 :(得分:0)
使用arraycopy()在数组中int和double元素之间没有自动转换。本机方法检查数组类型等效,并在不匹配时抛出ArrayStoreException。你将不得不恢复普通或循环方法:
for (int i = 0; i < a.length(); i++)
a[i] = b[i];