gpt4 book ai didi

java - arraycopy() : Does Java ignore index arguments when length argument is 0?

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:28 24 4
gpt4 key购买 nike

我写了一些我认为应该在某些情况下会失败的代码,但事实并非如此。我正在执行一个 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。

关于java - arraycopy() : Does Java ignore index arguments when length argument is 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com