Sobes.tech
Junior — Middle

Може ли да се промени вредноста променљиве која је проглашена као effectively final унутар објекта?

sobes.tech АИ

Одговор од АИ

U Javi, termin "effectively final" označava da promenljiva nije menjana nakon inicijalizacije, iako nije eksplicitno deklarisana ključnom reči final. Ovo je važno, na primer, za korišćenje takvih promenljivih u lambda izrazima ili anonimnim klasama.

Ako je promenljiva deklarisana kao effectively final, njena vrednost ne može biti promenjena — pokušaj dodeljivanja nove vrednosti izazvaće grešku pri kompilaciji.

Međutim, ako ta promenljiva referiše na objekat, stanje samog objekta može biti promenjeno, jer se ne menja referenca, već unutrašnja polja objekta. Na primer:

final List<String> list = new ArrayList<>();
list.add("novi element");  // Ovo je dozvoljeno

// list = new ArrayList<>();  // Greška, ne može se promeniti referenca

Dakle, vrednost promenljive (referenca) ne može biti promenjena, ali sadržaj objekta na koji se odnosi može biti modifikovan.