Maison > Java > javaDidacticiel > Comment le mot clé « final » affecte-t-il les comparaisons de chaînes en Java ?

Comment le mot clé « final » affecte-t-il les comparaisons de chaînes en Java ?

Patricia Arquette
Libérer: 2024-11-29 03:55:14
original
807 Les gens l'ont consulté

How Does the `final` Keyword Affect String Comparisons in Java?

Comparaison de chaînes et finalité en Java

En Java, les chaînes jouent un rôle central et leur comportement peut être influencé par le mot-clé final. Considérez l'extrait de code suivant :

String str1 = "str";
String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
Copier après la connexion

Ce code concatène deux chaînes, puis le compare à la chaîne littérale à l'aide de l'opérateur d'égalité ==. Le résultat, comme prévu, est faux.

Cependant, lorsque les variables de chaîne sont déclarées finales, le résultat change :

final String str1 = "str";
final String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
Copier après la connexion

Dans ce cas, l'expression de comparaison renvoie désormais vrai. Ce changement de comportement soulève la question de savoir comment final affecte les comparaisons de chaînes.

L'interaction de la finalité et de l'internement

En Java, lorsqu'une chaîne est créée avec une compilation- expression constante de temps (par exemple, une chaîne littérale) et que la variable chaîne est marquée comme finale, elle devient une variable constante. Ces variables constantes sont intégrées par le compilateur, ce qui signifie que leur valeur est remplacée à l'endroit où elles sont utilisées.

Dans notre deuxième exemple de code, l'opération de concaténation devient effectivement :

String concat = "str" + "ing"; // Inlined from final variables
Copier après la connexion

Il en résulte in :

String concat = "string";
Copier après la connexion

La chaîne de caractères est internée, ce qui signifie qu'elle est stockée dans un pool d'instances de chaîne uniques. La même instance interne est utilisée pour tout autre littéral de chaîne avec un contenu identique.

Lorsque nous comparons concat avec "string", nous comparons en fait deux références à la même instance interne. Par conséquent, le résultat est vrai.

Le cas non final

Dans le premier exemple de code, puisque les variables de chaîne ne sont pas finales, elles ne sont pas au moment de la compilation expressions constantes. L'opération de concaténation se produit au moment de l'exécution, ce qui crée un nouvel objet String. Cet objet n'est pas interné, sa référence est donc différente de la référence internée de "string", ce qui entraîne une fausse comparaison.

Conclusion

En Java, déclarer une chaîne les variables comme finales et leur initialisation avec des expressions constantes au moment de la compilation peuvent avoir un impact sur les comparaisons de chaînes. Lorsque la chaîne est internée, comme c'est le cas pour les variables finales, des comparaisons sont effectuées sur la base de références partagées à l'instance internée unique, conduisant à des résultats potentiellement différents.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal