variable que método modificador metodos finales estaticas define declarar clases calificador java immutability final

java - que - public static final



Palabra clave final de Java para variables (6)

¿Cómo la palabra clave final no hace una variable inmutable? Wikipedia dice que no.


Aunque no se recomienda, Java permite modificar las variables finales utilizando la reflection .


En Java, el término final se refiere a referencias, mientras que inmutable se refiere a objetos. Asignar el modificador final a una referencia significa que no puede cambiar para apuntar a otro objeto, pero el objeto en sí puede modificarse si es mutable.

Por ejemplo:

final ArrayList<String> arr = new ArrayList<String>(); arr.add("hello"); // OK, the object to which arr points is mutated arr = null; // Not OK, the reference is final and cannot be reassigned to

Como lo menciona el artículo de Wikipedia, si viene de C ++, debe disociar el concepto de const en final e inmutable.


Lee el resto del artículo de Wikipedia:

Para ilustrar que la finalidad no garantiza la inmutabilidad: supongamos que reemplazamos las tres variables de posición con una sola: posta pública final; donde pos es un objeto con tres propiedades pos.x, pos.y y pos.z. Entonces no se puede asignar pos, pero sí las tres propiedades, a menos que sean definitivas.


Para primitivas como int, double, char etc., funciona más como se podría esperar.

private final int status = 10; status = 20; // WONT COMPILE because status is final


Supongamos que usted ha declarado que myList es final. Aún puede agregar nuevos elementos a myList, por lo que su estado NO es inmutable. Lo que no puede hacer, debido a la palabra clave final, es cambiar myList para referirse a una lista diferente.


porque si una referencia es definitiva, aún puede cambiar las cosas en el objeto al que apunta la referencia. Usted simplemente no puede cambiar la referencia.