arraycopy():当长度参数为0时,Java会忽略索引参数吗?

arraycopy():当长度参数为0时,Java会忽略索引参数吗?,java,arrays,Java,Arrays,我写了一些代码,我认为在某些情况下应该失败,但事实并非如此。我正在做一个arraycopy(),在某些情况下,它会要求复制到一个越界索引,但在所有这些情况下,传递给arraycopy()的长度都是0 我唯一的猜测是,Java的arraycopy()实现首先检查length=0,如果是,则返回而不检查索引参数?我找不到任何关于arraycopy()内部如何工作的参考 如果这是Java实现它的方式,并且代码运行良好,我的直觉告诉我,我仍然应该编写代码,这样就不会发生这种情况。我应该为此担心吗 代码是

我写了一些代码,我认为在某些情况下应该失败,但事实并非如此。我正在做一个arraycopy(),在某些情况下,它会要求复制到一个越界索引,但在所有这些情况下,传递给arraycopy()的长度都是0

我唯一的猜测是,Java的arraycopy()实现首先检查length=0,如果是,则返回而不检查索引参数?我找不到任何关于arraycopy()内部如何工作的参考

如果这是Java实现它的方式,并且代码运行良好,我的直觉告诉我,我仍然应该编写代码,这样就不会发生这种情况。我应该为此担心吗

代码是:

if (manyItems == data.length) {
        ensureCapacity(manyItems * 2 + 1); 
    }
    if (manyItems == currentIndex) {
        data[currentIndex] = element;
    } 
    else {   // if data.length = 10, manyItems = 9, currentIndex = 8,
                     //   currentIndex + 2 = 10, which is out of bounds.
                     //   But manyItems - currentIndex -1 = 0, so nothing is copied.
        System.arraycopy(data, currentIndex + 1, data, currentIndex + 2,
            manyItems - currentIndex - 1);
        data[currentIndex + 1] = element;
        currentIndex++;
    }

对我来说似乎很奇怪,但也许我没有正确地思考它?我是否应该确保使用manyItems>=data.length-1时的容量?

即使长度为0,也会测试索引。如果索引是数组的长度,则它可能超出范围,但是任何较大的索引都会触发ArrayIndexOutOfBoundsException。

好的,谢谢,我想我现在明白了。目标索引未作为数组的有效索引进行测试,但测试的目的是确保索引+长度