Junior — Middle
Meg lehet változtatni egy effectively finalként deklarált változó értékét egy objektumon belül?
sobes.tech MI
Válasz az MI-től
A Java-ban az "effectively final" kifejezés azt jelenti, hogy a változót az inicializálás után nem módosították, bár nem explicit módon a final kulcsszóval van deklarálva. Ez például fontos az ilyen változók lambda kifejezésekben vagy névtelen osztályokban való használatához.
Ha egy változót effectively finalként deklarálnak, akkor értékét nem lehet megváltoztatni — az új érték hozzárendelése fordítási hibát eredményez.
Azonban, ha ez a változó egy objektumra mutat, az objektum állapota módosítható, mivel nem a referencia, hanem az objektum belső mezői változnak. Például:
final List<String> list = new ArrayList<>();
list.add("új elem"); // Ez megengedett
// list = new ArrayList<>(); // Hiba, nem lehet megváltoztatni a referenciát
Tehát, a változó értéke (a referencia) nem módosítható, de az általa hivatkozott objektum tartalma módosítható.