Я обнаружил, что объявление их по мере необходимости приводит к меньшему количеству ошибок, чем объявление их в начале. Я также обнаружил, что объявление их в минимально возможном объеме также предотвращает ошибки.
Когда я посмотрел байт-код, сгенерированный расположением объявления несколько лет назад, я обнаружил, что они более или менее идентичны. Были случайные различия в зависимости от того, когда они были назначены. Даже что-то вроде:
for(Object o : list) {
Object temp = ...; //was not "redeclared" every loop iteration
}
против
Object temp;
for(Object o : list) {
temp = ...; //nearly identical bytecoode, if not exactly identical.
}
Получилось более или менее идентично