Maison >Java >javaDidacticiel >Est-ce que `new String('abc')` crée un nouvel objet chaîne dans le pool de chaînes Java ?
Confusion de duplication du pool de chaînes Java
Considérez l'extrait de code suivant :
String first = "abc"; String second = new String("abc");
L'utilisation du nouveau mot-clé crée un nouvel objet String. Cependant, la question se pose : ce nouvel objet réside-t-il dans le tas normal ou dans le pool String ? Et combien d'objets String se retrouvent dans le pool ?
Mécanisme de pool de chaînes
Le pool de chaînes sert de cache, optimisant l'utilisation de la mémoire. Lorsque vous déclarez une chaîne littérale comme « abc », le compilateur la reconnaît et récupère l'objet String existant du pool s'il en existe un. s et p dans l'exemple suivant feront référence au même objet String :
String s = "abc"; String p = "abc";
Effet de new String()
Cependant, la création d'un nouvel objet String en utilisant new String("abc") crée un objet distinct non stocké dans le pool. Le pool stocke une référence au littéral "abc" mais pas la copie générée avec new.
Puisque String est immuable en Java, il est inutile d'utiliser new String("literal") car cela entraîne des surcharges inutiles.
Interning Strings
L'appel de la méthode intern() sur un objet String l'ajoute au piscine si elle n'est pas déjà présente. Cette méthode renvoie une référence à la chaîne regroupée, qu'elle soit déjà dans le pool ou non.
Conclusion
En substance, l'utilisation du mot-clé new crée une chaîne distincte objet en dehors du pool, même si la même chaîne littérale existe déjà dans le pool. Le pool de chaînes stocke uniquement les références aux chaînes littérales, optimisant ainsi l'allocation de mémoire. Il est important d'être conscient de ce comportement pour éviter la création d'objets inutiles et promouvoir une gestion efficace de la mémoire.
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!