Java:System.arraycopy 没有复制我的数组
Posted
技术标签:
【中文标题】Java:System.arraycopy 没有复制我的数组【英文标题】:Java: System.arraycopy is not copying my arrays 【发布时间】:2013-05-08 15:34:26 【问题描述】:我有一个名为“first”的数组和另一个名为“second”的数组,这两个数组都是字节类型,大小为 10 个索引。
我将这两个数组复制到一个名为“第三”的数组中,该数组也是字节类型,长度为 2*first.length,如下所示:
byte[] third= new byte[2*first.length];
for(int i = 0; i<first.length;i++)
System.arraycopy(first[i], 0, third[i], 0, first.length);
for(int i = 0; i<second.length;i++)
System.arraycopy(second[i], 0, third[i], first.length, first.length);
但它不是在复制,它会抛出异常:ArrayStoreException
我在here 上读到,当 src 数组中的元素由于类型不匹配而无法存储到 dest 数组中时,会引发此异常。但我所有的数组都以字节为单位,所以没有不匹配
到底是什么问题?
【问题讨论】:
如果您使用arraycopy
,则不需要该循环。反过来,如果您使用循环,则不需要arraycopy
,因为您是自己分配值。
【参考方案1】:
您传递System.arraycopy
数组,而不是数组元素。通过将first[i]
作为第一个参数传递给arraycopy
,您将传入一个byte
,它(因为arraycopy
被声明为接受Object
的src
参数) 被提升为Byte
。所以你得到ArrayStoreException
是the documentation列表中的第一个原因:
...如果以下任何一项为真,则抛出
ArrayStoreException
并且不修改目标:
src
参数引用的对象不是数组。
以下是如何使用 arraycopy
将两个 byte[]
数组复制到第三个:
// Declarations for `first` and `second` for clarity
byte[] first = new byte[10];
byte[] second = new byte[10];
// ...presumably fill in `first` and `second` here...
// Copy to `third`
byte[] third = new byte[first.length + second.length];
System.arraycopy(first, 0, third, 0, first.length);
System.arraycopy(second, 0, third, first.length, second.length);
【讨论】:
谢谢大家..但我决定接受这个答案作为对我错误的解释..【参考方案2】:System.arraycopy(first, 0, third, 0, first.length);
System.arraycopy(second, 0, third, first.length, second.length);
【讨论】:
以上是关于Java:System.arraycopy 没有复制我的数组的主要内容,如果未能解决你的问题,请参考以下文章
Java-Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别