Maison >Java >javaDidacticiel >## L'appel de « array.length » dans une boucle for est-il un goulot d'étranglement en termes de performances ?
Lors du remplacement des boucles for par des boucles for-each, les développeurs rencontrent souvent le modèle suivant :
<code class="java">for (int i = 0, n = a.length; i < n; i++) { ... }</code>
Au lieu du plus simple :
<code class="java">for (int i = 0; i < a.length; i++) { ... }</code>
Cela soulève la question : l'affectation supplémentaire n = a.length est-elle un impact sur les performances des tableaux ?
Non , un appel à array.length est une opération O(1) ou à temps constant.
La propriété .length d'un tableau est un membre final public et son accès n'est pas plus lent qu'une variable locale. Ceci est différent des appels de méthode comme size(), qui impliquent généralement plus de surcharge.
Les compilateurs JIT modernes peuvent également optimiser l'appel à .length pour l'éliminer complètement. Pour vérifier cela, on peut inspecter le code source du compilateur JIT ou examiner le code natif vidé.
Cependant, le compilateur JIT n'est pas toujours en mesure d'effectuer cette optimisation, par exemple lorsque le débogage est activé ou lorsque le corps de la boucle contient des variables locales excessives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!