Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
30 Апр 2023
2 мин
2061

Различия между final и effectively final в Java

Обычно возникает путаница при работе с лямбда-выражениями в Java, когда встречается предупреждение: «локальные переменные, на которые ссылается лямбда-выражение,

Обычно возникает путаница при работе с лямбда-выражениями в Java, когда встречается предупреждение: «локальные переменные, на которые ссылается лямбда-выражение, должны быть final или effectively final». Чтобы разобраться в этом, давайте разберемся, что означают эти два термина.

Final

Ключевое слово final в Java используется для обозначения того, что значение переменной не может быть изменено после того, как оно было инициализировано. Если переменная объявлена как final, любые попытки изменить ее значение приведут к ошибке компиляции.

Вот пример:

final int x = 10;
x = 20; // Ошибка компиляции: "нельзя присвоить значение final переменной x"

Effectively final

С появлением Java 8 вводится понятие «effectively final». Переменная считается «effectively final», если ее значение не изменяется после инициализации, даже если она не объявлена как final. Это означает, что переменная не обязательно должна быть явно объявлена как final, если ее значение не изменяется после инициализации.

Вот пример:

int x = 10;
x = 20; // Переменная x больше не является "effectively final",
        // так как ее значение было изменено после инициализации

Важно: «Effectively final» переменная может быть использована в лямбда-выражениях и анонимных классах, так как Java гарантирует, что ее значение не будет изменено.

Важно отметить, что ключевое слово final и понятие «effectively final» связаны с тем, как переменная используется, а не с тем, как она объявлена.

Итог

Итак, разница между final и «effectively final» заключается в том, что final является ключевым словом, которое применяется при объявлении переменной и означает, что ее значение не может быть изменено после инициализации, тогда как «effectively final» — это понятие, которое означает, что значение переменной не изменяется после инициализации, даже если она не объявлена как final.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий