Дело в том:
public Config(){
final String path = "<path>";
doSomething(path);
}
не имеет никакого смысла. doSomething()
может не изменять объект String, который вы ему передаете.
Вся ваша идея использовать final, как это, просто ошибочна. Объекты String являются неизменяемыми, и этот метод получает ссылку на такой объект String. Так что даже если у вас есть
void doSomething(String whatever) {
whatever = "in your face";
...
}
Ваша ссылка path
останется прежней после этого вызова.
С этой точки зрения, в первом примере вы могли бы (следует для удобства чтения) перейти к doSomething("<path>");
Кроме того, реальный ответ здесь таков: у вас, похоже, неправильные представления о правильном использовании последнего ключевого слова. Нет смысла объявлять переменную final, когда она используется только один раз, как в ваших примерах. Наличие локальной переменной final только предотвращает повторное присвоение этой переменной в пределах ее области действия. Вы только читаете переменную один раз, таким образом, использование final не добавляет ничего полезного в ваш код.