Мне было интересно, объявлять ли переменную один раз (вне цикла), а затем изменять ее значение на каждой итерации цикла, быстрее, чем объявлять переменную в той же строке, что и обновление ее значения (внутри цикла), которое затем объявляет переменную каждая итерация цикла.
С одной стороны, я не буду жертвовать даже 1 тактовой частотой процессора, но с другой стороны, мне нравится, чтобы мой код был как можно короче.
Спасибо!
С точки зрения производительности это не имеет никакого значения, поэтому просто пойдите в зависимости от того, какой вариант имеет более читабельность для вас.
Зачем? Когда код скомпилирован, к нему применяется множество оптимизаций, чтобы перевести его в машинный код. В конце переменная является только зарезервированной позицией в памяти, поэтому предположим, что вы объявляете переменную внутри цикла. В этом случае компьютер должен "резервировать" позицию памяти каждый раз, когда вы зацикливаете, поэтому вы будете тратить процессорные часы на каждой итерации цикла. Но, как уже упоминалось, к коду применяется множество статических оптимизаций, поэтому резервирование памяти будет выведено из цикла при компиляции кода.
Здесь вы можете найти объяснение с более ясным примером:
http://en.wikipedia.org/wiki/Loop-invariant_code_motion
Но в основном современные компиляторы оптимизируют практически все, что обнаруживается при анализе статического кода.
Возможно, лучше задать вопрос, почему вам нужна эта оптимизация?
Если вы программируете что-то настолько маленькое с такой небольшой мощностью, что этот уровень оптимизации необходим, Java НЕ является языком для использования. Что-то вроде C или сборки лучше подходит для этого.
Даже в сложном игровом движке я бы не хотел тратить время на такие микро-оптимизации, как это было, если бы это был метод, который назывался 60+ раз в секунду, где я мог бы продемонстрировать посредством тестирования значительное влияние оптимизации.
В ситуации, когда я буду использовать Java, такого рода оптимизации не стоит того времени, которое они набирают для ввода.