web-dev-qa-db-fra.com

Est-il judicieux de définir une chaîne finale en Java?

Duplicata possible:
chaîne et final

De http://docs.Oracle.com/javase/6/docs/api/Java/lang/String.html Je peux lire cela:

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

Est-ce à dire qu'un final String n'a pas vraiment de sens en Java, dans le sens où l'attribut final est en quelque sorte redondant?

41
Campa

L'objet String est immuable, mais il s'agit en fait d'une référence à un objet String qui pourrait être modifié.

Par exemple:

String someString = "Lala";

Vous pouvez réaffecter la valeur détenue par cette variable (pour qu'elle fasse référence à une chaîne différente):

someString = "asdf";

Cependant, avec ceci:

final String someString = "Lala";

Ensuite, la réaffectation ci-dessus ne serait pas possible et entraînerait une erreur au moment de la compilation.

56
Mike Kwan

final fait référence à la variable, pas à l'objet, donc oui, cela a du sens.

par exemple.

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

Ca a du sens. Le mot clé final empêche les futures affectations à la variable. Voici une erreur en Java:

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

Les références sont définitives, les objets ne le sont pas. Vous pouvez définir un objet modifiable comme final et en changer l'état. La dernière garantie est que la référence que vous utilisez ne peut plus jamais pointer vers un autre objet.

3
Kalpak Gadre