【发布时间】:2016-11-03 12:18:45
【问题描述】:
我不完全了解 System.arraycopy 的工作原理。举个简单的例子:
String[] arr = {"a"};
String[] copyArr = new String[10];
System.arraycopy(arr, 0, copyArr, 0, 1);
System.out.println(Arrays.toString(copy));
我理解它就像“从 [0] 开始的 arr 复制 1 个元素到 copyArr 到位置 [0]”。这没关系。现在我把它改成:
String[] arr = {"a"};
String[] copyArr = new String[10];
System.arraycopy(arr, 1, copyArr, 0, 0);
System.out.println(Arrays.toString(copy));
由于 arr.length 是 1,我们可以调用的唯一索引是 [0] 我预计它会抛出 ArrayIndexOutOfBoundsException 但它不会。
所以问题是下面这两行之间有什么区别,如果 src 中的 [1] 处没有元素(因为它的长度为 1),为什么第一行是可能的,这是本机方法,所以它是内部实现?
System.arraycopy(src, 1, dest, 0, 0);
System.arraycopy(src, 0, dest, 0, 0);
当我们把它改为:
System.arraycopy(src, 2, dest, 0, 0);
存在 ArrayIndexOutOfBoundsException(这种情况在文档中进行了描述,因为 srcPos+length > src.length)。
【问题讨论】:
-
因为这是文档所说的?或者你想知道为什么它这么说吗?
标签: java arrays indexoutofboundsexception