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