"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pool de constantes de chaîne : pourquoi \"new\" crée-t-il un nouvel objet chaîne même lorsque le littéral existe ?

Pool de constantes de chaîne : pourquoi \"new\" crée-t-il un nouvel objet chaîne même lorsque le littéral existe ?

Publié le 2024-11-06
Parcourir:800

String Constant Pool: Why Does \

Pool de constantes de chaîne : un examen approfondi

Les littéraux de chaîne en Java sont regroupés pour optimiser l'utilisation de la mémoire et améliorer les performances. Cela signifie que lorsqu'un littéral String est rencontré, le compilateur vérifie dans le pool de constantes String un objet String existant avec la même valeur. Si elle est trouvée, la référence est dirigée vers l'objet existant, évitant ainsi la création d'un nouvel objet.

Cependant, une confusion survient lors de l'utilisation de l'opérateur "new" pour créer un nouvel objet String, car cela semble contredire la règle. de stage. Pour clarifier cela, examinons les instructions suivantes :

  • "Lorsque le compilateur rencontre un littéral de chaîne, il vérifie le pool pour voir si une chaîne identique existe déjà."
  • "Dans dans le cas de « nouveau », les références aux littéraux String sont toujours placées dans la table des constantes, mais lorsque vous utilisez « new », la JVM est obligée de créer un nouvel objet String au moment de l'exécution, plutôt que d'utiliser celui de la constante. table."

Ces instructions indiquent que même si le littéral String est interné et stocké dans le pool, l'utilisation de "new" force la JVM à créer un nouvel objet String. Cela signifie que malgré l'existence d'une chaîne équivalente dans le pool, l'opérateur "new" le contourne et alloue un nouvel objet dans la mémoire non-pool.

Pour illustrer cela, considérons l'exemple suivant :

String one = new String("test");
String two = "test";
System.out.println(one.equals(two)); // true
System.out.println(one == two); // false

Comme prévu, la valeur de "one" et "two" est "test", mais la comparaison "==" renvoie false car ils font référence à des objets String différents. En effet, l'utilisation de « new » force la création d'un nouvel objet String pour « one », même si le « test » littéral String existe déjà dans le pool.

En résumé, le pool de constantes String optimise utilisation de la mémoire en internant des littéraux de chaîne. Cependant, l’utilisation de « new » contourne le pool et crée un nouvel objet String dans la mémoire non-pool. Il en résulte deux objets String distincts avec la même valeur mais des références différentes.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3