logo

Pourquoi String est immuable ou final en Java

En programmation orientée objet, le chaîne ou objets immuables qui ne peut pas être modifié une fois créé. Mais on ne peut que changer la référence à l'objet. Nous nous limitons à modifier l'objet lui-même. Le La chaîne est immuable dans Java en raison de la sécurité, de la synchronisation et de la concurrence, de la mise en cache et du chargement des classes. La raison de rendre la chaîne finale est de détruire l'immuabilité et de ne pas permettre à d'autres de l'étendre.

Les objets String sont mis en cache dans le pool String, ce qui rend le Chaîne immuable . Les littéraux String mis en cache sont accessibles par plusieurs clients. Il existe donc toujours un risque où l’action effectuée par un client affecte tous les autres clients. Par exemple, si un client effectue une action et modifie la valeur de chaîne de Pressure à PRESSURE, tous les clients restants liront également cette valeur. Pour des raisons de performances, la mise en cache des objets String était importante, donc pour supprimer ce risque, nous devons rendre la chaîne immuable.

préparer le test mockito
Pourquoi String est immuable ou final en Java

Voici quelques autres raisons pour lesquelles String est immuable :

  • Le pool String ne peut pas être possible si String n'est pas immuable en Java. Beaucoup d'espace de tas est économisé par JRE . La même variable chaîne peut être référencée par plusieurs variables chaîne dans le pool. L'internement de chaînes ne peut pas non plus être possible si la chaîne n'est pas immuable.
  • Si nous ne rendons pas la chaîne immuable, cela constituera une menace sérieuse pour la sécurité de l'application. Par exemple, les noms d'utilisateur et les mots de passe de la base de données sont transmis sous forme de chaînes pour recevoir les connexions à la base de données. Le programmation des prises Les descriptions d'hôte et de port sont également transmises sous forme de chaînes. La chaîne est immuable, sa valeur ne peut donc pas être modifiée. Si la String ne reste pas immuable, tout pirate informatique peut provoquer un problème de sécurité dans l'application en modifiant la valeur de référence.
  • La chaîne est sans danger pour le multithreading en raison de son caractère immuable. Différents threads peuvent accéder à une seule « instance de chaîne ». Il supprime la synchronisation pour la sécurité des threads car nous rendons implicitement les chaînes thread-safe.
  • L'immuabilité donne la sécurité du chargement de la bonne classe par Classloader. Par exemple, supposons que nous ayons une instance dans laquelle nous essayons de charger la classe java.sql.Connection mais que les modifications de la valeur référencée dans la classe myhaked.Connection entraînent des effets indésirables sur notre base de données.

Comprenons le concept d'immuable à travers un exemple.

ImmutableString.java

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Sortir:

Pourquoi String est immuable ou final en Java

Description: Nous pouvons comprendre l’exemple ci-dessus à l’aide du schéma suivant :

qu'est-ce que le hashset java
Pourquoi String est immuable ou final en Java

Dans le pool de constantes de chaîne, le Bonjour reste inchangé et un nouvel objet chaîne est créé avec Bonjour le monde . Cela montre que les chaînes sont immuables. La variable de référence pointe vers le Bonjour pas au Bonjour le monde.

Si l'on veut qu'il fasse référence au Bonjour le monde , nous devons l'attribuer explicitement à cette variable. Par exemple:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Sortir:

Pourquoi String est immuable ou final en Java