Question

Quelle est la différence entre les énoncés suivants

String name = "Tiger";

final String name ="Tiger";

Bien que la classe est la classe String final, pourquoi avons-nous besoin de créer une chaîne variable « CONSTANT » comme définitive?

Était-ce utile?

La solution

final dans ce contexte signifie que la name variable ne peut être attribuée qu'une seule fois. Attribution d'un autre objet String à nouveau il en résulte une erreur de compilation.

Je pense que la source de la confusion est ici que le mot-clé final peut être utilisé dans plusieurs contextes différents:

  • dernière classe. La classe ne peut pas être sous-
  • dernière méthode. La méthode ne peut pas être surchargée
  • dernière variable: La variable ne peut être attribué qu'une seule fois
  • .

Voir l'article de Wikipedia sur des exemples sur chaque cas.

Autres conseils

"final" signifie des choses différentes dans les deux cas.

La classe java.lang.String est définitive. Cela signifie que vous ne pouvez pas en hériter.

Le « nom » variable est finale, ce qui signifie que vous ne pouvez pas le changer pour pointer vers une autre instance de String. Ainsi, une variable de chaîne non-finale n'est pas une constante, parce que vous pouvez le lire à deux moments différents et d'obtenir des valeurs différentes.

Comme il arrive, les objets de chaîne Java sont également immuables. Cela signifie que vous ne pouvez pas modifier la valeur qui représente un objet String particulier. Comparez cela avec un tableau - vous pouvez remplacer le premier élément d'un objet de tableau avec un autre objet, mais vous ne pouvez pas remplacer le premier caractère d'un objet String avec un autre car. C'est pourquoi String.replace () retourne une nouvelle chaîne -. Il ne peut pas modifier l'ancien

L'une des raisons de cette chaîne est définitive est d'empêcher une instance d'une sous-classe de chaîne, qui met en œuvre le comportement mutable, étant passé à la place d'une chaîne.

Mais si vous pouvez modifier un objet particulier, et si vous pouvez attribuer un autre objet à une variable, sont des concepts complètement différents. L'un est une propriété d'objets String, et l'autre est une propriété de variables String, qui sont des références à des objets String.

Rappelez-vous que mot-clé finale Java a deux objectifs dans ce cas:

  • cela signifie que la référence ne peut pas être à un autre String-- dire que vous ne pouvez pas le faire par la suite « name = ... »;
  • mais surtout, cela signifie que la référence est publié correctement aux autres threads (voir article lié pour plus de détails, ou des œuvres telles que Goetz et al, "Java Concurrency dans la pratique".

Jetez un oeil à Le dernier mot sur le mot-clé finale .

String name = "scott";
name = "tiger"; // OK

final String gender = "male";
gender = "female"; // won't compile you cannot reassign gender cause it's final

Vous confondez avec immuable finale.

String, comme Integer et Long, est une classe immuable dans les données internes est protégé contre toute modification par encapsulation.

Cependant, comme l'a dit Ayman, fait référence au dernier pointeur sur la chaîne.

Si une variable est marquée comme finale la valeur de cette variable ne peut pas être changé par exemple mot-clé finale lorsqu'il est utilisé avec une variable en fait une constante. Et si vous essayez pour modifier la valeur de cette variable au cours de votre programme le compilateur vous donnera une erreur.

Remarque:               Si vous marquez variable d'un type de référence finale, cette variable ne peut pas se référer à tout autre objet. Cependant, vous pouvez changer, car seule la référence elle-même est définitive le contenu de l'objet.

SOURCE: mots-clés final en Java

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top