Ответ 1
Ситуация вообще не изменилась. Компилятор только немного умнее и не заставляет вас использовать последнее ключевое слово.
Если он обнаруживает, что переменная является фактически окончательной, т.е. назначается только один раз и никогда после, все хорошо. Если он обнаруживает, что он не является окончательным, он отказывается компилировать.
Итак, вместо того, чтобы заставить вас сделать переменную final, она автоматически обнаруживает ее. Но вы не можете использовать неэффективные финальные переменные внутри внутреннего класса или лямбда.