Je ne connais pas la réponse sûre, mais je pense serait: non. Il n'y a aucun moyen pour un compilateur Java, à moins de spécial ArrayList, de savoir que les fonctions que vous appelez seront non-mutantes et que, par conséquent, l'appel de size() devrait retourner la même valeur. Par conséquent, je trouve très improbable qu'un compilateur Java factorise les appels répétés à size() et les stocke dans une valeur temporaire. Si vous avez besoin de ce niveau d'optimisation, vous devriez stocker vous-même la valeur dans une variable locale. Sinon, oui, vous paierez le coût d'invocation de la fonction associé à l'appel de la méthode size(). Notez, cependant, que la méthode size() est O (1) pour une ArrayList (bien que la surcharge de l'appel de fonction soit assez lourde). Personnellement, j'élimine tous les appels à size() des boucles et les stocke manuellement dans un local, le cas échéant.
Modifier
Même si une telle optimisation ne peut être effectuée par un compilateur Java, il a été bien souligné que le JIT peut inline la mise en œuvre de ArrayList.size() de telle sorte qu'il ne coûte que même en tant que Les coûts sont négligeables, bien que vous puissiez économiser légèrement en enregistrant manuellement dans un fichier temporaire (ce qui pourrait potentiellement éliminer une recherche de mémoire et servir à la place la variable dans un registre CPU).
Il est un appel rapide pour ArrayList, mais stocker le résultat dans la variable locale si vous l'utilisez comme un test condition dans chaque itération de la boucle. –
pouvez-vous s'il vous plaît clarifier la question. Il semble que certaines personnes interprètent cela comme "fait size() effectue un calcul ou retourne trivialement un champ" vs. "plusieurs appels à size() seront remplacés par un seul appel à size() avec les invocations suivantes remplacées par une variable locale dans laquelle le résultat précédent a été sauvegardé ". J'ai interprété comme le dernier, tandis que d'autres ont interprété comme le premier. S'il vous plaît, faites cela complètement clair. –
Merci pour la clarification. –