Maison > Java > javaDidacticiel > La déclaration de chaînes comme « finales » en Java change-t-elle la manière dont « == » les compare ?

La déclaration de chaînes comme « finales » en Java change-t-elle la manière dont « == » les compare ?

Susan Sarandon
Libérer: 2024-11-29 15:51:10
original
241 Les gens l'ont consulté

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

Comparaison de chaînes avec == lorsqu'elles sont déclarées finales en Java

En Java, l'opérateur == compare les références mémoire de deux objets. Cependant, lorsque les chaînes sont déclarées comme finales et initialisées avec des constantes de compilation, un comportement unique se produit.

Scénario 1 : chaînes non finales

Considérez le code suivant segment :

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

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

Le résultat de ce code serait faux. L'opération de concaténation crée un nouvel objet String, qui n'est pas égal à la chaîne littérale préexistante "string".

Scénario 2 : Chaînes finales

Maintenant, passons déclarer les chaînes comme finales :

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

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

Étonnamment, le résultat est maintenant vrai. En effet, déclarer les chaînes comme finales permet au compilateur d'intégrer leurs valeurs et de traiter l'expression entière comme une expression constante au moment de la compilation.

Optimisation du compilateur : stage

Lorsqu'une expression constante au moment de la compilation implique une chaîne, la machine virtuelle Java (JVM) l'interne, ce qui signifie qu'elle stocke une instance unique de la chaîne dans un emplacement spécial appelé chaîne. piscine. Ainsi, la chaîne concaténée dans le deuxième scénario est directement comparée à la chaîne interne "string", ce qui donne un résultat vrai.

Conclusion

Déclarer les chaînes comme finales avec Les constantes de compilation conduisent l'optimiseur à traiter l'expression comme un seul objet String, permettant des vérifications d'égalité syntaxique (==) avec des littéraux de chaîne préexistants. Cela démontre l'optimisation du compilateur en Java et son impact sur les comparaisons d'identité d'objet.

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!

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