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?
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.
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
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
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.