Maison >Java >javaDidacticiel >Pourquoi la réaffectation d'une variable String en Java ne modifie-t-elle pas la valeur de la chaîne d'origine ?

Pourquoi la réaffectation d'une variable String en Java ne modifie-t-elle pas la valeur de la chaîne d'origine ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 11:55:14466parcourir

Why does reassigning a String variable in Java not change the original string's value?

La chaîne est immuable : comprendre le concept

En Java, les chaînes sont immuables, ce qui signifie que leur contenu ne peut pas être directement modifié. Cependant, ce concept peut prêter à confusion lorsque nous observons un code tel que :

String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);

Sortie :

a 1-->a  
a 2-->ty

Que se passe-t-il réellement ?

Malgré en attribuant une nouvelle valeur à a, la sortie affiche la valeur d'origine. Cette apparente contradiction découle de l’immuabilité des chaînes. Lorsqu'une nouvelle chaîne est affectée à une variable de référence, un nouvel objet chaîne est créé et la référence est mise à jour pour pointer vers le nouvel objet. La chaîne d'origine reste inchangée.

Comment fonctionnent les chaînes

Pour mieux comprendre cela, explorons les fonctionnalités de la classe String :

  • Création d'une chaîne : String str = "knowledge" crée un objet chaîne avec la valeur "knowledge" et attribue une référence str à it.
  • Attribution d'une référence : String s = str crée une nouvelle référence s qui pointe vers le même objet chaîne.
  • Tentative de modification : str = str.concat(" base") ajoute conceptuellement " base" en str, mais comme les chaînes sont immuables, un nouvel objet chaîne avec la valeur "knowledge base" est créé et la référence str est mise à jour pour pointer vers it.

Gestion de la mémoire et pool de constantes de chaînes

Les littéraux de chaîne sont courants dans les applications et peuvent occuper une mémoire importante. Pour optimiser l'utilisation de la mémoire, la machine virtuelle Java (JVM) gère un « pool constant de chaînes » qui stocke tous les littéraux de chaîne. Lorsqu'une chaîne littérale est rencontrée, le compilateur vérifie dans le pool une correspondance existante. Si elle est trouvée, la référence est dirigée vers la chaîne existante, évitant ainsi la création d'un nouvel objet.

L'importance de l'immuabilité

L'immuabilité des chaînes joue un rôle crucial dans la mémoire gestion. Étant donné que les références à des chaînes peuvent pointer vers le même objet sous-jacent, la modification du contenu de l'un d'entre eux affecterait toutes les références. Par conséquent, l'immuabilité garantit que la chaîne d'origine est préservée, même si sa référence est modifiée.

Finalité de la classe String

Pour éviter les remplacements qui pourraient rompre l'immuabilité de la chaîne, le La classe String est marquée comme finale. Cela signifie qu'aucune autre classe ne peut hériter et modifier son comportement.

En résumé

Les chaînes sont immuables en Java. Lorsqu'une variable de référence pointant vers un objet chaîne est réaffectée, un nouvel objet chaîne est créé, mettant effectivement à jour la référence plutôt que de modifier l'objet existant. L'immuabilité est essentielle pour l'efficacité de la mémoire et pour assurer la cohérence entre les références pointant vers la même valeur de chaîne.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn