La portée des variables locales doit toujours être la plus petite possible.
Dans votre exemple, je présume qu'il str
n'est pas utilisé en dehors de la while
boucle, sinon vous ne poseriez pas la question, car le déclarer à l'intérieur de la while
boucle ne serait pas une option, car il ne compilerait pas.
Donc, comme il str
n'est pas utilisé en dehors de la boucle, la plus petite étendue possible pour se str
trouve dans la boucle while.
Donc, la réponse est catégoriquement qui str
doit absolument être déclarée dans la boucle while. Pas de si, pas de and, pas de mais.
Le seul cas où cette règle pourrait être violée est si, pour une raison quelconque, il est d'une importance vitale que chaque cycle d'horloge soit retiré du code, auquel cas vous voudrez peut-être envisager d'instancier quelque chose dans une portée externe et de le réutiliser au lieu de la ré-instanciation à chaque itération d'une portée intérieure. Cependant, cela ne s'applique pas à votre exemple, en raison de l'immuabilité des chaînes en java: une nouvelle instance de str sera toujours créée au début de votre boucle et devra être jetée à la fin de celle-ci, donc là il n'y a aucune possibilité d'optimiser là-bas.
EDIT: (en injectant mon commentaire ci-dessous dans la réponse)
Dans tous les cas, la bonne façon de faire les choses est d'écrire correctement tout votre code, d'établir une exigence de performance pour votre produit, de mesurer votre produit final par rapport à cette exigence, et s'il ne la satisfait pas, alors allez optimiser les choses. Et ce qui finit généralement par se produire, c'est que vous trouvez des moyens de fournir des optimisations algorithmiques agréables et formelles à quelques endroits qui permettent à notre programme de répondre à ses exigences de performances au lieu d'avoir à parcourir toute votre base de code et de modifier et de pirater des choses dans afin de serrer les cycles d'horloge ici et là.