Область локальных переменных всегда должна быть наименьшей из возможных.
В вашем примере я предполагаю, что str
- это , а не , используемый вне цикла while
, иначе вы бы не задавали вопрос, потому что объявление его внутри цикла while
не было бы вариант, так как он не будет компилироваться.
Таким образом, поскольку str
не используется вне цикла, наименьшая возможная область действия для str
- в цикла while.
Итак, ответ категорически , что str
абсолютно необходимо объявить в цикле while. Нет, если, нет и нет, но нет.
Единственный случай, когда это правило может быть нарушено, если по какой-то причине жизненно важно, чтобы каждый тактовый цикл был выдавлен из кода, и в этом случае вы можете рассмотреть создание экземпляра чего-либо во внешней области и повторное использование это вместо того, чтобы повторно создавать его экземпляр на каждой итерации внутренней области видимости. Однако это не относится к вашему примеру из-за неизменности строк в java: новый экземпляр str всегда будет создаваться в начале вашего цикла, и его нужно будет выбросить в конце, поэтому там нет возможности оптимизировать.
РЕДАКТИРОВАТЬ: (вставляя мой комментарий ниже в ответ)
В любом случае, правильный способ сделать что-то - это написать весь ваш код правильно, установить требования к производительности для вашего продукта, сравнить ваш конечный продукт с этим требованием, и если он не удовлетворяет этому, тогда приступайте к оптимизации. И в конечном итоге обычно происходит то, что вы находите способы обеспечить некоторые приятные и формальные алгоритмические оптимизации всего в нескольких местах, которые заставляют нашу программу соответствовать требованиям производительности вместо того, чтобы обходить весь ваш код и настраивать и взламывать вещи в чтобы сжать циклы часов тут и там.