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