1. Tout d'abord, String n'appartient pas aux 8 types de données de base.
Étant donné que la valeur par défaut d'un objet est nulle, la valeur par défaut de String est également nulle, mais il s'agit d'un objet spécial et possède certaines caractéristiques que d'autres objets n'ont pas.
2. new String() et new String("") déclarent tous deux une nouvelle chaîne vide, qui est une chaîne vide et non nulle
3. La différence entre
String str=new String (« kvill »); :
Ici, on ne parle pas du tas ou de la pile, on introduit simplement la constante piscine premier concept.
Le pool constant fait référence à certaines données déterminées lors de la compilation et enregistrées dans le fichier .class compilé. Il comprend des constantes dans les classes, méthodes, interfaces, etc., ainsi que des constantes de chaîne.
Regardez l'exemple 1 :
String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out. print ln( s0==s1 ); System.out.println( s0==s2 );
Le résultat est :
true true
Tout d'abord, nous devons savoir que Java assurez-vous qu'une constante de chaîne n'a qu'une copie.
Parce que les "kvill" dans s0 et s1 dans l'exemple sont tous deux des constantes de chaîne, ils sont déterminés au moment de la compilation, donc s0==s1 est vrai et "kv" et "ill" le sont également ; toutes les constantes de chaîne. Lorsqu'une chaîne est concaténée par plusieurs constantes de chaîne, elle doit elle-même être une constante de chaîne, donc s2 est également analysée en une constante de chaîne au moment de la compilation, donc s2 est également un pool de constantes. > de "kvill". Nous concluons donc que s0==s1==s2; La chaîne créée avec new String() n'est pas une constante et ne peut pas être déterminée au moment de la compilation, donc la chaîne créée avec new String() ne contient pas constantes Dans le pool, elles ont leur propre espace d'adressage.
Regardez l'exemple 2 :
String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 );
false false false
de "kvill" ; si vous les comprenez, vous saurez pourquoi ce résultat est obtenu. 4. String.intern() :
Encore un point : le pool de constantes qui existe dans le fichier .class est chargé par la JVM pendant l'exécution et peut être étendu. La méthode intern() de String est une méthode pour étendre le pool de constantes ; lorsqu'une instance String str appelle la méthode intern(), Java recherche s'il existe une constante de chaîne avec le même Unicode dans le pool de constantes, et si c'est le cas, renvoie sa référence. Si ce n'est pas le cas, ajoutez une chaîne Unicode égale à str dans le pool de constantes et renvoyez sa référence, cela sera clair en regardant l'exemple 3
Exemple 3 :
<🎜. >
Le résultat est :
String s0= “kvill”; String s1=new String(”kvill”); String s2=new String(“kvill”); System.out.println( s0==s1 ); System.out.println( “**********” ); s1.intern(); s2=s2.intern(); //把常量池中“kvill”的引用赋给s2 System.out.println( s0==s1); System.out.println( s0==s1.intern() ); System.out.println( s0==s2 );
Enfin, je vais dissiper un autre malentendu :
false ********** false //虽然执行了s1.intern(),但它的返回值没有赋给s1 true //说明s1.intern()返回的是常量池中”kvill”的引用 true
Regardez l'exemple 4 :
Résultat :
String s1=new String("kvill"); String s2=s1.intern(); System.out.println( s1==s1.intern() ); System.out.println( s1+" "+s2 ); System.out.println( s2==s1.intern() );
Dans cette classe nous n'avons pas déclaré de Constante "kvill", il n'y a donc pas de "kvill" dans le pool de constantes au début. Lorsque nous appelons s1.intern(), une nouvelle constante "kvill" est ajoutée au pool de constantes. Le "kvill" d'origine qui ne l'est pas. dans le pool constant existe toujours, et il ne s'agit pas de "enregistrer votre propre adresse dans le pool constant".
false kvill kvill true
s2 est maintenant l'adresse de "kvill" dans le pool constant, donc s2= =s1.intern() est vrai.
5. Concernant equals() et == :
Pour String, il s'agit simplement de comparer si les séquences Unicode de deux chaînes sont équivalentes, et de renvoyer true si elles sont égales while = ; = compare deux chaînes Si les adresses des chaînes sont les mêmes, c'est-à-dire si ce sont des références à la même chaîne.
6. Il y a beaucoup à dire sur le fait que String soit immuable
Tant que vous savez qu'une instance de String ne changera pas une fois générée, par exemple : String str=" kv" +"ill"+" "+"ans";
Il y a 4 constantes de chaîne. Tout d'abord, "kv" et "ill" génèrent "kvill" et le stockent dans la mémoire, puis "kvill" et " " Génèrent. "kvill" et le stocker en mémoire, et enfin générer "kvill ans"; et attribuer l'adresse de cette chaîne à str, car "l'immuabilité" de String génère de nombreuses
variables temporaires
, c'est pourquoi il il est recommandé d'utiliser StringBuffer, car StringBuffer est modifiable
[Recommandations associées]
1. Tutoriel vidéo gratuit Java
2 Analyse approfondie de la méthode stagiaire() en Java
3. JAVA Résumé de l'expérience dans l'utilisation de la méthode interne()
4. Quel est le concept de méthode interne en Java
5 Analyse. de stagiaire en Java La fonction de ()
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!