Sobes.tech
Junior — Middle

Kan de waarde van een variabele die als effectively final is gedeclareerd binnen een object worden gewijzigd?

sobes.tech AI

Antwoord van AI

In Java betekent de term "effectively final" dat een variabele niet is gewijzigd na de initialisatie, hoewel deze niet expliciet met het sleutelwoord final is gedeclareerd. Dit is bijvoorbeeld belangrijk bij het gebruik van dergelijke variabelen in lambda-uitdrukkingen of anonieme klassen.

Als een variabele als effectively final wordt gedeclareerd, kan de waarde ervan niet worden gewijzigd: een poging om een nieuwe waarde toe te wijzen, zal een compilatiefout veroorzaken.

Echter, als deze variabele verwijst naar een object, kan de toestand van dat object worden gewijzigd, omdat niet de referentie wordt gewijzigd, maar de interne velden van het object. Bijvoorbeeld:

final List<String> list = new ArrayList<>();
list.add("nieuw item");  // Dit is toegestaan

// list = new ArrayList<>();  // Fout, referentie kan niet worden gewijzigd

Dus, de waarde van de variabele (de referentie) kan niet worden gewijzigd, maar de inhoud van het object waarnaar wordt verwezen, kan worden aangepast.