为什么下面的代码会抛出ArrayStoreException
?意外的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);
为什么下面的代码会抛出ArrayStoreException
?意外的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);
从文档为System.arraycopy
:
否则,如果下面的是 真,则抛出ArrayStoreException异常 和目的地不被修改:
[...]
src参数和dest参数 指到其组件类型为 是不同基本类型的数组。
这正是这里的情况 - int
和double
是不同的原始类型,从而证明抛出异常。
arraycopy
的要点在于,它可以通过盲目复制原始数据而快速工作,而无需应用任何转换。在你的情况下,它将必须应用转换,所以它失败。
尝试双** [] ** a = {2.0,3.4,3.6,2.7,5.6}; 和 int ** [] ** b
是的,这是在具有不同基元类型的数组作为组件的arraycopy
中记录的行为。这种类型是否可以正常推广并不相关;这是arraycopy
的设计目的。
数组中的int和double元素与arraycopy()之间没有自动转换。本地方法检查数组类型等价性并抛出ArrayStoreException不匹配。你必须回复到循环的平原或方法:
for (int i = 0; i < a.length(); i++)
a[i] = b[i];
如果你声称你的代码抛出异常,那么你至少应该发布编译的代码。 – 2009-06-24 13:59:12