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