1

我有一个名为“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

我在这里读到,当 src 数组中的元素由于类型不匹配而无法存储到 dest 数组中时,会引发此异常。但我所有的数组都以字节为单位,所以没有不匹配

究竟是什么问题?

4

2 回答 2

9

您传递数组System.arraycopy,而不是数组元素。通过作为第一个参数传入,你传入 a ,它(因为被声明为接受参数)被提升为. 因此,您得到文档列表中的第一个原因:first[i]arraycopybytearraycopyObjectsrcByteArrayStoreException

...如果以下任何一项为真,ArrayStoreException则抛出 an 并且不修改目标:

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);
于 2013-05-08T15:37:33.117 回答
2
System.arraycopy(first, 0, third, 0, first.length);
System.arraycopy(second, 0, third, first.length, second.length);
于 2013-05-08T15:37:53.940 回答