Sobes.tech
Junior — Middle

È possibile modificare il valore di una variabile dichiarata come effectively final all'interno di un oggetto?

sobes.tech AI

Risposta dell'AI

In Java, il termine "effectively final" significa che una variabile non è stata modificata dopo l'inizializzazione, anche se non è dichiarata esplicitamente con la parola chiave final. Questo è importante, ad esempio, per l'uso di tali variabili in espressioni lambda o classi anonime.

Se una variabile è dichiarata come effectively final, non è possibile modificarne il valore: tentare di assegnarle un nuovo valore causerà un errore di compilazione.

Tuttavia, se questa variabile fa riferimento a un oggetto, lo stato dell'oggetto stesso può essere modificato, poiché ciò che cambia non è il riferimento, ma i campi interni dell'oggetto. Ad esempio:

final List<String> list = new ArrayList<>();
list.add("nuovo elemento");  // Questo è consentito

// list = new ArrayList<>();  // Errore, non si può cambiare il riferimento

Pertanto, il valore della variabile (il riferimento) non può essere modificato, ma il contenuto dell'oggetto a cui si riferisce può essere modificato.