¿Se puede cambiar el valor de una variable declarada como efectivamente final dentro de un objeto?
sobes.tech AI
Respuesta de la IA
En Java, el término "effectively final" significa que la variable no ha sido modificada después de su inicialización, aunque no esté explícitamente declarada con la palabra clave final. Esto es importante, por ejemplo, para usar esas variables en expresiones lambda o clases anónimas.
Si una variable se declara como effectively final, no se puede cambiar su valor: intentar asignarle uno nuevo provocará un error de compilación.
Sin embargo, si esa variable hace referencia a un objeto, el estado del propio objeto puede modificarse, ya que lo que cambia no es la referencia, sino los campos internos del objeto. Por ejemplo:
final List<String> list = new ArrayList<>();
list.add("nuevo elemento"); // Esto es válido
// list = new ArrayList<>(); // Error, no se puede cambiar la referencia
Por lo tanto, no se puede cambiar el valor de la variable (la referencia), pero sí se puede modificar el contenido del objeto al que hace referencia.