2012-04-19 12 views
31

Duplicar posibles:
String and Final¿Tiene sentido definir una cadena final en Java?

De http://docs.oracle.com/javase/6/docs/api/java/lang/String.html que puede leer que:

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

¿Quiere decir esto que una final String no tiene mucho sentido en el Java, en el ¿Siente que el atributo final es de alguna manera redundante?

+0

Declarar una * variable * final no tiene nada que ver con el Objeto que le ha asignado. –

+0

El 'Objeto' en sí mismo es inmutable, pero la referencia al mismo podría ser mutable. Hacerlo 'final' también hace que la referencia sea inmutable. –

+0

Gracias por todas las respuestas y comentarios. Perdón por duplicar – Campa

Respuesta

46

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

Por ejemplo:

String someString = "Lala"; 

puede reasignar el valor en poder de esta variable (para que sea 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.

17

final se refiere a la variable, no al objeto, por lo que sí, tiene sentido.

p. Ej.

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

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

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

Las referencias son definitivas, los objetos no lo son. 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.

Cuestiones relacionadas