Introduction :
Le String Constant Pool est une fonctionnalité du Machine virtuelle Java (JVM) qui stocke des valeurs constantes, y compris des littéraux de chaîne. Lorsque la JVM rencontre un littéral de chaîne lors de la compilation, elle recherche dans le pool un littéral existant avec la même valeur. Si elle est trouvée, la référence au nouveau littéral est dirigée vers la chaîne existante, évitant ainsi la création d'une nouvelle instance.
Stagiaire avec le mot clé "nouveau" :
Cependant , l'utilisation du mot-clé "new" lors de la création d'un nouvel objet String introduit un comportement différent, comme indiqué dans les références fournies. Alors que la référence au littéral String ("test" dans ce cas) sera toujours placée dans le pool, la JVM est obligée de créer un nouvel objet String au moment de l'exécution au lieu de réutiliser celui du pool.
Question :
Si la référence au littéral String dans le pool est la même que lors de sa création avec "new", la JVM ne devrait-elle pas renvoyer la référence existante au lieu d'en créer une nouvelle ?
Réponse :
Non, la JVM ne renverra pas la référence existante lorsque l'opérateur "nouvel" est utilisé. Au lieu de cela, il créera un nouvel objet String et l'attribuera à la référence créée par le mot-clé "new". En effet :
Exemple :
<code class="java">String literal = "test"; String one = new String(literal); String two = "test"; System.out.println(literal == two); // true (references in pool) System.out.println(one == two); // false (distinct objects)</code>
Dans cet exemple, les références « literal » et « two » pointent vers le même objet String dans le pool. Cependant, la référence « one » pointe vers un autre objet String créé par « new ». Par conséquent, la comparaison d'égalité utilisant "==" renvoie false.
Clarification :
L'instruction "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à" doit être interprétée comme "dans le pool", ce qui signifie que seuls les littéraux de chaîne qui ont été internés ou explicitement ajoutés au pool seront pris en compte pour l'internement.
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!