Sobes.tech
Junior — Middle

Je možné zmeniť hodnotu premennej, ktorá je deklarovaná ako effectively final, vo vnútri objektu?

sobes.tech AI

Odpoveď od AI

V Jave, pojem "effectively final" označuje, že premenná nebola po inicializácii zmenená, hoci nie je výslovne deklarovaná kľúčovým slovom final. To je dôležité napríklad pri používaní takýchto premenných v lambda výrazoch alebo anonymných triedach.

Ak je premenná deklarovaná ako effectively final, jej hodnotu nie je možné zmeniť — pokus o priradenie novej hodnoty spôsobí chybu pri kompilácii.

Avšak, ak táto premenná odkazuje na objekt, stav samotného objektu môže byť zmenený, pretože sa nemení referencia, ale vnútorné polia objektu. Napríklad:

final List<String> list = new ArrayList<>();
list.add("nový prvok");  // Toto je povolené

// list = new ArrayList<>();  // Chyba, nie je možné zmeniť referenciu

Takže, hodnotu premennej (referenciu) nie je možné zmeniť, ale obsah objektu, na ktorý odkazuje, môže byť modifikovaný.