我正在准备 OCA 认证 1Z0-803 考试,在一些模拟测试中我遇到了以下问题:
int[] scores = { 1, 2, 3, 4, 5, 6};
System.arraycopy(scores, 2, scores, 3, 3);
for(int i : scores)
System.out.print(i);
我认为正确的答案可能是123345,但事实并非如此,因为正确的答案是123456。我多次阅读了有关此方法的java文档,但我无法理解为什么我会得到这个结果。 对此有什么建议吗?
更新1 在我更新后,正确答案是 123456。不同之处在于,在这种情况下源数组和目标数组是相同的。来自java doc:如果 src 和 dest 参数引用相同的数组对象,则执行复制,就好像位置 srcPos 到 srcPos+length-1 处的组件首先复制到具有 length 组件的临时数组,然后临时数组的内容通过目标数组的 destPos+length-1 复制到位置 destPos
最佳答案
你是对的,正确答案是123346
。我不确定您在哪里看到它应该是 123456
,但查看每个参数的描述显然没有意义。
- 第一个参数是来源,
{1,2,3,4,5,6}
- 第二个参数是源数组中的起始位置。
- 第三个参数是我们复制的目标,在这种情况下与源相同。
- 第四个参数在目标数据中的起始位置。在这种情况下是 3。
- 最后一个参数是我们要复制的值的长度。
根据您的新编辑,正确答案再次不是 123456
,而是您预期的 123345
。
关于java - System.arraycopy问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29580440/