Sobes.tech
Junior — Middle

¿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.