Sobes.tech
Junior — Middle

Se poate modifica valoarea unei variabile declarate ca efectiv finală în interiorul unui obiect?

sobes.tech AI

Răspuns de la AI

În Java, termenul "effectively final" înseamnă că o variabilă nu a fost modificată după inițializare, deși nu este declarat explicit cu cuvântul cheie final. Acest lucru este important, de exemplu, pentru utilizarea acestor variabile în expresii lambda sau clase anonime.

Dacă o variabilă este declarată ca fiind effectively final, nu se poate schimba valoarea sa — încercarea de a-i atribui o valoare nouă va cauza o eroare de compilare.

Cu toate acestea, dacă această variabilă face referire la un obiect, starea obiectului poate fi modificată, deoarece ceea ce se schimbă nu este referința, ci câmpurile interne ale obiectului. De exemplu:

final List<String> list = new ArrayList<>();
list.add("element nou");  // Acest lucru este permis

// list = new ArrayList<>();  // Eroare, nu se poate schimba referința

Prin urmare, valoarea variabilei (referința) nu poate fi schimbată, dar conținutul obiectului la care face referire poate fi modificat.