Sobes.tech
Junior — Middle

Kann man den Wert einer als effectively final deklarierten Variablen innerhalb eines Objekts ändern?

sobes.tech KI

Antwort von AI

In Java bedeutet der Begriff "effectively final", dass eine Variable nach ihrer Initialisierung nicht mehr geändert wurde, obwohl sie nicht explizit mit dem Schlüsselwort final deklariert ist. Das ist wichtig, zum Beispiel bei der Verwendung solcher Variablen in Lambda-Ausdrücken oder anonymen Klassen.

Wenn eine Variable als effectively final deklariert ist, kann ihr Wert nicht mehr geändert werden – der Versuch, ihr einen neuen Wert zuzuweisen, führt zu einem Kompilierungsfehler.

Wenn diese Variable jedoch auf ein Objekt verweist, kann der Zustand des Objekts geändert werden, da sich nicht die Referenz ändert, sondern die internen Felder des Objekts. Zum Beispiel:

final List<String> list = new ArrayList<>();
list.add("neues Element");  // Das ist erlaubt

// list = new ArrayList<>();  // Fehler, Referenz kann nicht geändert werden

Daher kann der Wert der Variablen (die Referenz) nicht geändert werden, aber der Inhalt des Objekts, auf das sie verweist, kann verändert werden.