意外的ArrayStoreException

时间:2009-06-24 13:55:26

标签: java

为什么以下代码抛出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);

4 个答案:

答案 0 :(得分:11)

来自System.arraycopy的文档:

  

否则,如果是以下任何一种情况   如果是,则抛出ArrayStoreException   并且目的地未被修改:

     

[...]

     

src参数和dest参数   引用其组件类型的数组   是不同的原始类型。

这就是这里的情况 - intdouble是不同的基本类型,因此会记录异常。

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];