Junior — Middle
Lze změnit hodnotu proměnné deklarované jako effectively final uvnitř objektu?
sobes.tech AI
Odpověď od AI
V jazyce Java znamená pojem "effectively final", že proměnná nebyla po inicializaci změněna, i když není výslovně deklarována klíčovým slovem final. To je důležité například při použití takových proměnných v lambda výrazech nebo anonymních třídách.
Pokud je proměnná deklarována jako effectively final, nelze její hodnotu změnit — pokus o přiřazení nové hodnoty způsobí chybu při kompilaci.
Nicméně, pokud tato proměnná odkazuje na objekt, lze měnit stav samotného objektu, protože se nemění odkaz, ale vnitřní pole objektu. Například:
final List<String> list = new ArrayList<>();
list.add("nový prvek"); // To je povoleno
// list = new ArrayList<>(); // Chyba, nelze změnit odkaz
Tedy, hodnotu proměnné (odkaz) nelze změnit, ale obsah objektu, na který odkazuje, lze měnit.