modificador method java string final

method - ¿Tiene sentido definir una cadena final en Java?



modificador final java (4)

El objeto String es inmutable, pero lo que es en realidad es una referencia a un objeto String que podría modificarse.

Por ejemplo:

String someString = "Lala";

Puede reasignar el valor que tiene esta variable (para hacer referencia a una cadena diferente):

someString = "asdf";

Sin embargo, con esto:

final String someString = "Lala";

Entonces la reasignación anterior no sería posible y daría lugar a un error en tiempo de compilación.

Posible duplicado:
Cadena y Final

Desde http://docs.oracle.com/javase/6/docs/api/java/lang/String.html Puedo leer eso:

Strings are constant; their values cannot be changed after they are created.

¿Esto significa que una final String no tiene sentido en Java, en el sentido de que el atributo final es de alguna manera redundante?


Las referencias son finales, los objetos no. Puede definir un objeto mutable como final y cambiar su estado. Lo que asegura finalmente es que la referencia que está utilizando no puede volver a señalar a otro objeto.


Que tiene sentido. La palabra clave final evita futuras asignaciones a la variable. El siguiente sería un error en java:

final String x = "foo"; x = "bar" // error on this assignment


final refiere a la variable, no al objeto, entonces sí, tiene sentido.

p.ej

final String s = "s"; s = "a"; // illegal