Junior
Qu'est-ce qu'un pool de chaînes en Java?
sobes.tech IA
Réponse de l'IA
La piscine de chaînes (String pool) est une zone mémoire spéciale dans le tas (heap) de Java, où sont stockés les littéraux de chaînes et les chaînes internées. Son objectif principal est d'économiser de la mémoire en réutilisant les mêmes valeurs de chaîne.
Comment cela fonctionne :
Lorsqu'un littéral de chaîne est créé (par exemple, "bonjour"), la JVM vérifie d'abord si une chaîne avec cette valeur existe déjà dans la piscine.
- Si la chaîne existe : La JVM retourne une référence à l'objet existant dans la piscine, au lieu d'en créer un nouveau.
- Si la chaîne n'existe pas : La JVM crée un nouvel objet
Stringdans la piscine et retourne une référence à celui-ci.
Création de chaînes et piscine :
- Avec un littéral de chaîne :
// "bonjour" est un littéral de chaîne String s1 = "bonjour"; String s2 = "bonjour"; // s1 et s2 référenceront le même objet dans la piscine de chaînes - Avec le constructeur
new String():String s3 = new String("monde"); String s4 = new String("monde"); // s3 et s4 référenceront des objets différents dans le tas, même si leur valeur est identique. // Le littéral de chaîne "monde" peut être dans la piscine, mais les objets s3 et s4 en dehors. - Méthode
intern():String s5 = new String("java"); // La méthode intern() vérifie si une chaîne avec cette valeur existe dans la piscine String s6 = s5.intern(); // Si oui, elle retourne la référence à l'objet dans la piscine. // Sinon, elle ajoute la chaîne courante à la piscine et retourne la référence.
Avantages de la piscine de chaînes :
- Économie de mémoire : Réduit le nombre d'objets de chaînes en double.
- Amélioration des performances : La comparaison de chaînes avec des littéraux (
==) peut être plus rapide que la comparaison d'objetsStringavecequals(), si les deux opérandes font référence au même objet dans la piscine.
Remarque importante :
La comparaison de chaînes avec l'opérateur == vérifie si deux variables font référence au même objet en mémoire. Pour comparer le contenu des chaînes, utilisez toujours la méthode equals().
String str1 = "abc"; // Dans la piscine
String str2 = "abc"; // Dans la piscine, la même référence
String str3 = new String("abc"); // Hors de la piscine
String str4 = str3.intern(); // Dans la piscine, la même référence que str1 et str2
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1 == str4); // true
System.out.println(str1.equals(str3)); // true