J'ai écrit du code que je pense devrait échouer dans certaines conditions, mais ce n'est pas le cas. Je fais un arraycopy() qui, dans certains cas, demandera une copie à un index hors limites, mais dans tous ces cas, la longueur passée à arraycopy() serait de 0.
Ma seule supposition est que l'implémentation de arraycopy() en Java vérifie d'abord si la longueur = 0, et si c'est le cas, retourne sans vérifier les arguments d'index ? Je ne trouve aucune référence sur le fonctionnement interne de arraycopy().
Si c'est ainsi que Java le met en œuvre, et que le code fonctionne bien, mon instinct me dit que je devrais quand même écrire le code pour que cela ne se produise pas. Devrais-je m'inquiéter de cela ?
Le code est :
if (manyItems == data.length) {
ensureCapacity(manyItems * 2 + 1);
}
if (manyItems == currentIndex) {
data[currentIndex] = element;
}
else { // si data.length = 10, manyItems = 9, currentIndex = 8,
// currentIndex + 2 = 10, ce qui est hors limites.
// Mais manyItems - currentIndex -1 = 0, donc rien n'est copié.
System.arraycopy(data, currentIndex + 1, data, currentIndex + 2,
manyItems - currentIndex - 1);
data[currentIndex + 1] = element;
currentIndex++;
}
Ça me semble étrange, mais peut-être que je ne réfléchis pas correctement ? Devrais-je juste m'assurer que manyItems >= data.length-1 ?