Tout d'abord, jetons un coup d'œil au code source de la classe String dans le JDK. Vous pouvez voir que la classe String est finalement modifiée. , ce qui signifie que la classe String ne peut pas être héritée. String n'a pas de sous-classes. De cette façon, tous ceux qui utilisent JDK utilisent la même classe String. Si String peut être hérité, tout le monde peut étendre String et la chaîne utilisée par. tout le monde n'est pas Dans la même version, deux personnes différentes utilisent la même méthode et affichent des résultats différents, ce qui rend impossible le développement du code. L'héritage et le remplacement de méthode apportent non seulement de la flexibilité, mais apportent également de nombreuses sous-classes.
2. Quatre façons de créer une chaîne
Deuxième méthode : générer des objets via la méthode de construction
Méthode 3 : générer un objet via un tableau de caractères
Méthode 4 : via une méthode statique de chaîne valueOf (n'importe quelle type de données) = > Convertir en chaîne (couramment utilisé)
3 Littéral de chaîne
true --> littéral booléen
" abc " - > Littéral de chaîne
Le littéral d'une chaîne est en fait un objet de chaîne
String str = « bonjour mot » ;
À l'heure actuelle, il s'agit à la fois d'une chaîne littérale et d'un objet chaîne. Afin de faciliter la compréhension, faites un dessin. À ce stade, pour faciliter la compréhension, nous pensons d'abord qu'il est stocké sur le tas, mais en fait. il est stocké dans la zone de méthode. Si str2 = "Hello" à ce moment, cela n'affectera pas la sortie de str, car Hello entouré de " " est également un objet chaîne, indiquant qu'un nouvel espace a été ouvert sur. le tas à ce moment-là, et str2 enregistre l'espace d'adressage du nouvel objet à ce moment, ce qui n'a aucun effet sur str
4 La comparaison de chaînes est égale
Tous les types de données de référence sont comparés lorsqu'ils sont égaux, utilisez la méthode égale pour comparer. Les classes couramment utilisées dans le JDK ont remplacé la méthode égale. Vous pouvez l'utiliser directement
Le type de données de référence utilise == pour comparer les adresses
L'image ci-dessous montre deux références pointant vers le même espace d'adressage. est lié au pool constant de chaînes
La taille de comparaison d'égal à égal est une comparaison sensible à la casse
La méthode equalsIgnoreCase n'est pas Case. -comparaison sensible
2. Pool de constantes de chaîne
1. Qu'est-ce qu'un pool de constantes de chaîne ? Un pool de constantes de chaîne sera maintenu si l'objet n'existe pas dans le tas, un objet chaîne sera généré et ajouté. le pool de constantes de chaîne ; lorsque la méthode d'affectation directe est utilisée pour générer un objet chaîne, la JVM trouve la référence. Le contenu pointé existe déjà dans le pool de constantes. À ce stade, il n'est pas nécessaire de créer un nouvel objet chaîne. mais réutilisez directement l'objet existant. C'est pourquoi les trois références dans l'image ci-dessus pointent vers la même adresse
Lorsque Lorsque l'objet est généré pour la première fois, il n'y a rien dans le pool constant, donc un objet chaîne est généré. et stocké dans le pool constant Lorsque l'objet est généré pour la deuxième et la troisième fois, la JVM constate que le même contenu existe déjà dans le pool constant. Elle ne générera plus de nouveaux objets et pointera directement vers le même espace d'adressage que str1.
Le programme est exécuté de droite à gauche. À ce stade, le côté droit de la première ligne de code est une constante chaîne, qui est également un objet chaîne, alors ouvrez d'abord un espace dans le pool de constantes, puis créez une nouvelle chaîne. L'objet est stocké et le programme est exécuté vers la gauche. Lorsque le nouveau mot-clé est rencontré, un nouvel objet est créé et stocké dans le tas. Ensuite, str1 pointe vers l'objet dans le tas. aux deuxième et troisième lignes de code, on constate que le pool constant a été Si l'objet existe, il ne sera plus créé Lorsque le nouveau mot-clé est rencontré, un nouvel objet sera créé. :
La méthode interne fournie par la classe String, il s'agit d'une méthode locale :
Appel La méthode interne enregistrera l'objet pointé par la référence de chaîne actuelle dans le pool de constantes de chaîne. . Il existe deux situations :
1. Si l'objet existe déjà dans le pool constant actuel, aucun nouvel objet ne sera généré et renvoyé dans l'objet String
2. Si l'objet n'existe pas dans le pool constant actuel, ajoutez l'objet au pool et renvoyez l'adresse après être entré dans le pool.
1. Jetez un œil au résultat des lignes de code suivantes
Parce que la méthode interne a une valeur de retour, str1 appelle uniquement la méthode interne à ce moment et ne reçoit pas la valeur de retour, donc str1 pointe toujours vers l'objet dans le tas, str2 Pointe vers l'objet dans le pool constant, donc il renvoie false
Tant que vous recevez la valeur de retour de l'appel de la méthode interne, elle retournera true ; l'objet pointé par str1 est ajouté manuellement au pool, et le pool a déjà l'objet, laissez directement str1 pointer vers l'objet
2. Regardez la sortie des lignes de code suivantes
Lors de la saisie manuelle du pool, il n'y a rien dans le pool, alors déplacez-le directement dans le pool constant
3. Immuabilité des chaînes
À quoi l'immuabilité fait référence ici. Ils sont "hello", "world", "helloworld", "!!!", et l'épissé "helloworld !!!" Ce sont des objets chaîne créés. Une fois ces objets déclarés, leur contenu ne peut pas être modifié, mais la référence peut être modifiée à un moment donné, à un autre moment, elle pointe vers helloworld, et maintenant elle pointe vers helloworld. à bonjour le monde ! ! ! , tout cela est possible
Une chaîne n'est qu'un tableau de caractères -> char[], la chaîne est en fait stockée dans le tableau de caractères. Pourquoi le contenu de la chaîne ne peut-il pas être modifié ? Jetons un coup d'œil au code source de la chaîne et découvrons-le.
Nous pouvons voir que le tableau de caractères à l'intérieur de String est encapsulé. Ce tableau de caractères n'est pas accessible depuis l'extérieur de la classe String, encore moins en modifiant le contenu de la chaîne
String str = " hello ";
2 .Comment pour modifier le contenu de la chaîne
b .StringBuffer : thread-safe, mauvaises performances
De plus, l'utilisation des deux classes est exactement la même
Si vous devez épisser des chaînes fréquemment, utilisez la méthode append de la classe StringBuilder. Un seul objet est généré ici, qui changera après un certain temps. Cela devient bonjour, et bientôt cela devient bonjour tout le monde
3. Utilisation spécifique de la classe StringBuilder
1. StringBuilder peut être converti en classe String en appelant la méthode toString
2. La classe String peut être convertie en classe StringBuilder, en utilisant le constructeur ou la méthode append de StringBuilder .
Autres méthodes couramment utilisées :
a. Opération d'inversion de chaîne, reverse() fournie par sb;
b. Supprimez la plage de données spécifiée, supprimez (int start, int end); supprimez tout le contenu du début à la fin, fermé à gauche et ouvert à droite
c. , chaque type de données) : Commencez l'insertion à partir de la position de l'index de départ, et l'index de départ de l'insertion est start
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!