Java - Déclaration de variables dans des boucles for
Est la déclaration d'une variable à l'intérieur d'une boucle de mauvaises pratiques? Il me semble que cette façon d'agir, comme on le voit dans le premier bloc de code ci-dessous, dix fois la quantité de mémoire que le deuxième... en raison de la création d'une nouvelle chaîne de caractères dans chaque itération de la boucle. Est-ce correct?
for (int i = 0; i < 10; i++) {
String str = "Some string";
}
vs
String str;
for (int i = 0; i < 10; i++) {
str = "Some String";
}
source d'informationauteur dfetter88
Vous devez vous connecter pour publier un commentaire.
Pas du tout! Il se localise la variable à son point d'utilisation.
Le compilateur peut optimiser choses à garder l'utilisation de la mémoire efficace. Pour info: vous pouvez l'aider, si vous utilisez le
final
mot-clé à dire que votre variable d'un point de référence fixe à un objet.Remarque: si vous avez un objet complexe où vous êtes l'exécution de code complexe dans le constructeur, alors vous pourriez avoir à vous soucier d'une ou plusieurs exécutions, et de déclarer l'objet en dehors de la boucle.
Dans les deux exemples, vous allez d'instancier un nouvel objet de type string qui contient la chaîne de caractères "une Chaîne de caractères" le même nombre de fois.
Dans le premier exemple où vous déclarez
str
à l'intérieur de la boucle, toutes les références à cette chaîne va être perdu après la boucle complète, permettant de Java garbage collector pour supprimer toutes les instances de la les chaînes à partir de la mémoire. Cependant, dans le deuxième exemple où vous déclarezstr
à l'extérieur de la boucle, la dernière chaîne que vous avez créé y aura toujours une référence à l'extérieur de la boucle, et Java du garbage collector ne supprime 9 de 10 de la les chaînes à partir de la mémoire qui ont été instancié.En tant que telle, la première méthode est la meilleure car vous ne tenez pas sur toutes les références de la chaîne, ce qui interfère avec le garbage collector de la capacité de déterminer si elle est encore en usage.
Au-delà de ce que @Jason S dit, je voudrais aussi vous encourager à réfléchir à la lisibilité du code.
Par exemple, si vous ne l'écriture de référence une fois, il serait votre intention plus clair à utiliser quelque chose comme:
Contre:
De même, si la valeur de la chaîne est vraiment basé sur quelque chose qui est spécifique à une itération de la boucle, la déclaration de la variable à l'intérieur de la boucle.
La mémoire utilisée par une variable de référence est petit. Il est généralement préférable de déclarer l'élément à l'intérieur de la boucle, car il sera plus près de là où il est utilisé et plus lisible.
Il dépend. L'inefficacité est par-dessus la tête de la création de l'objet String, en supposant que votre compilateur ne change rien. La mémoire sera effacée une fois qu'il est hors de portée.