Junior — Middle
Може ли да се промени стойността на променлива, обявена като effectively final, вътре в обект?
sobes.tech AI
Отговор от AI
В Java терминът "effectively final" означава, че променливата не е била променена след инициализация, въпреки че не е явно обявена с ключовата дума final. Това е важно, например, при използване на такива променливи в ламбда изрази или анонимни класове.
Ако променливата е обявена като effectively final, не може да се променя стойността й — опитът да се присвои нова стойност ще доведе до грешка при компилация.
Обаче, ако тази променлива сочи към обект, състоянието на самия обект може да се променя, тъй като се променя не референцията, а вътрешните полета на обекта. Например:
final List<String> list = new ArrayList<>();
list.add("нов елемент"); // Това е допустимо
// list = new ArrayList<>(); // Грешка, не може да се промени референцията
Така стойността на променливата (референцията) не може да се промени, но съдържанието на обекта, към който сочи, може да бъде променено.