Maison > Java > javaDidacticiel > Introduction à l'ajout et à la comparaison de chaînes de caractères (détaillées)

Introduction à l'ajout et à la comparaison de chaînes de caractères (détaillées)

不言
Libérer: 2019-04-13 09:36:36
avant
4137 Les gens l'ont consulté

Cet article vous apporte une introduction à l'ajout et à la comparaison des chaînes String (détaillée). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aide.

Chaîne Ajout et comparaison de chaînes

public static void main(String[] args)  {
    String a = "helloword";
    final String b = "hello";
    String d = "hello";
    String c = b + "word";
    String e = d + "word";
    String f ="hello"+"word";
    System.out.println(a == c);
    System.out.println(a == e);
    System.out.println(a == f);

}
Copier après la connexion

输出:
true
false
true
Copier après la connexion

La première chose à clarifier est le type de données de référence == compare la valeur de l'adresse, égal ne réécrit pas, compare la valeur de l'adresse, après la réécriture, compare le contenu. La chaîne est réécrite, StringBuffer n'est pas réécrit

Deuxièmement :

. a==c est vrai car b est un type final Lorsque la variable finale est un type de données de base ou un type String, si sa valeur exacte peut être connue lors de la compilation, le compilateur l'utilisera comme constante de compilation. Autrement dit, lorsque la variable finale est utilisée, elle équivaut à un accès direct à la constante et n'a pas besoin d'être déterminée au moment de l'exécution. Par conséquent, dans le morceau de code ci-dessus, puisque la variable b est modifiée par final, elle sera traitée comme une constante du compilateur, donc là où b est utilisé, la variable b sera directement remplacée par sa valeur. Donc c = b+"mot" est égal à c = "bonjour" + "mot". Identique à ---> Une fois final, le contenu est comparé directement au lieu de l'adresse.

a ==e est faux car e = d+"word" crée en fait un objet StringBuffer, puis utilise l'objet StringBuffer pour exécuter la méthode append pour créer l'objet chaîne "ab", puis le convertit en Chaîne . Mais cet objet String converti, c'est-à-dire le s3 ci-dessus, est placé dans le tas. Et s4 est une constante de chaîne, placée dans le pool de constantes. Ce qui est renvoyé est donc faux. ----->Les valeurs d'adresse sont différentes

a ==f est vrai car : Lorsque des constantes sont ajoutées, elles sont en fait ajoutées directement à "helloword" lors de la compilation. Il s'agit de l'optimisation de la JVM. , donc lors de l'exécution, les bytecodes de a et f sont les mêmes. Puisqu'il y a un "helloword" dans le pool de constantes, les deux références pointent vers une chaîne "helloword", donc le résultat renvoyé est également vrai. ----->Pointez vers la même adresse

[Recommandations associées : Tutoriel Java]

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!

Étiquettes associées:
source:segmentfault.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal