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); }
输出: true false true
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!