Я написал код, который, как мне кажется, должен давать сбой при определенных условиях, но это не так. Я делаю arraycopy (), которая в некоторых случаях будет запрашивать копию для индекса за пределами границ, но во всех таких случаях длина, передаваемая в arraycopy (), будет равна 0.
Мое единственное предположение, что Java-реализация arraycopy () сначала проверяет, равна ли длина = 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?