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ý.