Une chaîne est un type de variable inévitable lors de l’écriture de n’importe quel programme d’application. Les références de chaîne sont utilisées pour stocker divers attributs tels que le nom d'utilisateur, le mot de passe, etc. En Java, Les objets chaîne sont immuables . Immuable signifie simplement non modifiable ou immuable.
Une fois l'objet String créé, ses données ou son état ne peuvent pas être modifiés mais un nouvel objet String est créé.
Essayons de comprendre le concept d'immuabilité par l'exemple donné ci-dessous :
Testimmutablestring.java
class Testimmutablestring{ public static void main(String args[]){ String s='Sachin'; s.concat(' Tendulkar');//concat() method appends the string at the end System.out.println(s);//will print Sachin because strings are immutable objects } }Testez-le maintenant
Sortir:
Sachin
Maintenant, cela peut être compris par le diagramme ci-dessous. Ici, Sachin n'est pas modifié mais un nouvel objet est créé avec Sachin Tendulkar. C'est pourquoi String est connu comme immuable.
Comme vous pouvez le voir sur la figure ci-dessus, deux objets sont créés mais s La variable de référence fait toujours référence à « Sachin » et non à « Sachin Tendulkar ».
Mais si nous l'attribuons explicitement à la variable de référence, elle fera référence à l'objet 'Sachin Tendulkar'.
Par exemple:
Testimmutablestring1.java
class Testimmutablestring1{ public static void main(String args[]){ String s='Sachin'; s=s.concat(' Tendulkar'); System.out.println(s); } }Testez-le maintenant
Sortir:
Sachin Tendulkar
Dans un tel cas, s pointe vers le « Sachin Tendulkar ». Veuillez noter que l'objet Sachin n'est toujours pas modifié.
Pourquoi les objets String sont immuables en Java ?
Comme Java utilise le concept de chaîne littérale. Supposons qu'il y ait 5 variables de référence, toutes font référence à un objet « Sachin ». Si une variable de référence modifie la valeur de l'objet, elle sera affectée par toutes les variables de référence. C'est pourquoi les objets String sont immuables en Java.
Voici quelques fonctionnalités de String qui rendent les objets String immuables.
1. Chargeur de classe :
Un ClassLoader en Java utilise un objet String comme argument. Considérez que si l'objet String est modifiable, la valeur peut être modifiée et la classe censée être chargée peut être différente.
Pour éviter ce genre de mauvaise interprétation, String est immuable.
2. Fil sécurisé :
Comme l'objet String est immuable, nous n'avons pas à nous soucier de la synchronisation requise lors du partage d'un objet sur plusieurs threads.
3. Sécurité :
Comme nous l'avons vu lors du chargement de classe, les objets String immuables évitent d'autres erreurs en chargeant la classe correcte. Cela conduit à rendre le programme d’application plus sécurisé. Prenons un exemple de logiciel bancaire. Le nom d'utilisateur et le mot de passe ne peuvent être modifiés par aucun intrus car les objets String sont immuables. Cela peut rendre le programme d'application plus sécurisé.
4. Espace de tas :
L'immuabilité de String permet de minimiser l'utilisation de la mémoire tas. Lorsque nous essayons de déclarer un nouvel objet String, la JVM vérifie si la valeur existe déjà dans le pool String ou non. S'il existe, la même valeur est attribuée au nouvel objet. Cette fonctionnalité permet à Java d'utiliser efficacement l'espace du tas.
Pourquoi la classe String est Final en Java ?
La raison pour laquelle la classe String est finale est que personne ne peut remplacer les méthodes de la classe String. Afin qu'il puisse fournir les mêmes fonctionnalités aux nouveaux objets String qu'aux anciens.