5 votes

Arraycopy () : Java ignore-t-il les arguments d'index lorsque l'argument de longueur est 0 ?

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 ?

3voto

Ted Hopp Points 122617

Les indices sont testés même si la longueur est de 0. Un indice peut être hors limites s'il correspond à la longueur du tableau, mais toute valeur plus grande déclenche une ArrayIndexOutOfBoundsException.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X