Sobes.tech
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.