Обсяг локальних змінних завжди повинен бути найменшим.
У вашому прикладі я припускаю, що str
він не використовується за межами while
циклу, інакше ви не ставите запитання, тому що оголосити його всередині while
циклу не було б варіантом, оскільки він не збирався б.
Отже, оскільки str
він не використовується за межами циклу, найменший можливий обсяг для str
знаходиться в циклі while.
Отже, відповідь наголошується на тому, що str
абсолютно слід оголосити в циклі while. Ніяких ifs, no ands, no buts.
Єдиний випадок, коли це правило може бути порушене, це якщо з якихось причин має життєво важливе значення, щоб кожен тактовий цикл був витіснений з коду, і в цьому випадку ви можете розглянути можливість інстанції чогось у зовнішній області і повторно використовувати його замість реінстанціювати його на кожній ітерації внутрішнього простору. Однак це не стосується вашого прикладу, через незмінність рядків у java: новий екземпляр str завжди створюватиметься на початку вашого циклу, і його доведеться викинути в кінці, тому там немає можливості оптимізуватись там.
EDIT: (вводячи мій коментар нижче у відповідь)
У будь-якому випадку, правильний спосіб зробити це - правильно записати весь свій код, встановити вимогу щодо продуктивності свого продукту, відміряти свій кінцевий продукт відповідно до цієї вимоги, а якщо він його не задовольняє, то йдіть на оптимізацію речей. І зазвичай це відбувається - це те, що ви знайдете способи забезпечити приємні та формальні алгоритмічні оптимізації лише в декількох місцях, завдяки чому наша програма відповідає її вимогам щодо продуктивності, а не переглядати всю вашу кодову базу та налаштовувати та ламати речі. щоб вичавити тактові тактові годинники тут і там.