logo

Mutable et immuable en Java

Java est un langage de programmation orienté objet. Comme il s’agit d’un langage de programmation orienté objet, toutes les méthodes et mécanismes tournent autour des objets. Un concept basé sur les objets est modifiable et immuable en Java . Les objets en Java sont soit mutables, soit immuables ; cela dépend de la façon dont l'objet peut être itéré.

Dans cette section, nous discuterons des objets mutables et immuables en Java. De plus, nous verrons la différence entre eux.

Que sont les objets mutables

Les objets mutables sont des objets dont la valeur peut être modifiée après initialisation. Nous pouvons modifier les valeurs de l'objet, telles que le champ et les états, une fois l'objet créé. Par exemple, java.util.Date , Générateur de chaînes , StringBuffer , etc.

Lorsque nous apportons une modification aux objets mutables existants, aucun nouvel objet ne sera créé ; au lieu de cela, cela modifiera la valeur de l’objet existant. Les classes de ces objets fournissent des méthodes pour y apporter des modifications.

Les Getters et Setters (méthodes get() et set()) sont disponibles dans les objets mutables. L'objet Mutable peut ou non être thread-safe.

bash longueur de chaîne

Que sont les objets immuables

Les objets immuables sont des objets dont la valeur ne peut pas être modifiée après initialisation. On ne peut rien changer une fois l'objet créé. Par exemple, objets primitifs comme int , long , flotter , double , toutes les classes héritées, Classe d'emballage , Classe de chaîne , etc.

En un mot, immuable signifie non modifié ou immuable. Une fois les objets immuables créés, leurs valeurs et leur état ne peuvent plus être modifiés.

Seuls les Getters (méthode get()) sont disponibles et non les Setters (méthode set()) pour les objets immuables.

Voyons comment créer des classes pour les objets mutables et immuables.

Comment créer une classe mutable

Les deux éléments suivants sont essentiels pour créer une classe mutable :

  • Méthodes de modification des valeurs des champs
  • Getters et Setters des objets

Considérez l'exemple ci-dessous de la classe mutable :

tigre comparé au lion
 public class JtpExample { private String s; JtpExample(String s) { this.s = s; } public String getName() { return s; } public void setName(String coursename) { this.s = coursename; } public static void main(String[] args) { JtpExample obj = new JtpExample('JavaTpoint'); System.out.println(obj.getName()); // Here, we can update the name using the setName method. obj.setName('Java Training'); System.out.println(obj.getName()); } } 

Sortir:

 JavaTpoint Java Training 

À partir de l'exemple ci-dessus, nous modifions la valeur du nom à l'aide de la méthode setName.

Comment créer une classe immuable

Les éléments suivants sont essentiels pour créer une classe immuable :

  • Classe Final, qui est déclarée comme finale afin qu'elle ne puisse pas être étendue.
  • Tous les champs doivent être privés afin que l'accès direct aux champs soit bloqué.
  • Aucun passeur
  • Tous les champs mutables doivent être aussi finaux afin qu'ils ne puissent pas être itérés une fois initialisés.

Considérez l'exemple ci-dessous :

 public class JtpExample1 { private final String s; JtpExample1(final String s) { this.s = s; } public final String getName() { return s; } public static void main(String[] args) { JtpExample obj = new JtpExample('Core Java Training'); System.out.println(obj.getName()); } } 

Sortir:

 Core Java Training 

Par conséquent, nous avons discuté des objets et classes mutables et immuables. Discutons des différences entre eux :

Différence entre les objets mutables et immuables

Voici quelques différences clés entre les objets mutables et immuables dans Java :

tableau de réaction
  • Les objets mutables peuvent être modifiés en n'importe quelle valeur ou état sans ajouter de nouvel objet. Tandis que les objets immuables ne peuvent pas être modifiés en valeur ou en état une fois créés. Dans le cas d'objets immuables, chaque fois que nous changeons l'état de l'objet, un nouvel objet sera créé.
  • Les objets mutables fournissent une méthode pour modifier le contenu de l'objet. Comparativement, les objets immuables ne fournissent aucune méthode pour modifier les valeurs.
  • Les objets mutables prennent en charge les setters et les getters. En comparaison, les objets immuables ne prennent en charge que les setters, pas les getters.
  • Les objets Mutable peuvent ou non être thread-safe, mais les objets immuables sont thread-safe par défaut.
  • Les exemples de classes mutables sont StringBuffer, Java.util.Date, StringBuilder, etc. Alors que les objets immuables sont des classes héritées, des classes wrapper, une classe String, etc.

Considérez le tableau ci-dessous :

Mutable Immuable
Nous pouvons changer la valeur des objets mutables après l'initialisation. Une fois qu'un objet immuable est initié ; Nous ne pouvons pas changer ses valeurs.
L'état peut être modifié. L'état ne peut pas être modifié.
Dans les objets mutables, aucun nouvel objet n’est formé. Dans les objets immuables, un nouvel objet est formé lorsque la valeur de l'objet est modifiée.
Il fournit des méthodes pour modifier l'objet. Il ne fournit aucune méthode pour modifier la valeur de l'objet.
Il prend en charge les méthodes get() et set() pour traiter l'objet. Il ne prend en charge que la méthode get() pour transmettre la valeur de l'objet.
Les classes mutables peuvent ou non être thread-safe. Les classes immuables sont thread-safe.
Les éléments essentiels pour créer une classe mutable sont les méthodes de modification des champs, des getters et des setters. Les éléments essentiels pour créer une classe immuable sont la classe finale, les champs privés et les objets mutables finaux.

Pourquoi les chaînes en Java sont-elles immuables

String en Java est une classe très spéciale, car elle est utilisée dans presque tous les programmes Java. C'est pourquoi il est Immuable pour améliorer les performances et la sécurité. Comprenons-le en détail :

En Java, les chaînes utilisent le concept de littéraux. Supposons que nous ayons un objet ayant de nombreuses variables de référence. Dans un tel scénario, si nous modifions la valeur d'une variable de référence, cela affectera l'objet entier et toutes ses valeurs.

pente indéfinie

Outre les raisons ci-dessus, les raisons suivantes sont également responsables de rendre la chaîne immuable :

Les objets immuables sont très simples ; il n'y a pas besoin de synchronisation et sont intrinsèquement thread-safe. Mais les objets immuables constituent de bons éléments de base pour d’autres objets, nous devons donc leur apporter un soin particulier.

La plupart des développeurs font de la chaîne l'objet final afin qu'elle ne puisse pas être modifiée ultérieurement.

Conclusion

Nous avons discuté des objets mutables et immuables en Java, nous avons maintenant une compréhension claire des objets et des classes mutables et immuables. De plus, nous avons vu comment créer une classe mutable et immuable.

Il est à noter que les objets immuables peuvent être modifiés en leur valeur et leur état une fois lancés et peuvent ou non être thread-safe. En comparaison, les objets immuables ne peuvent pas être modifiés par leur état, leur valeur et leur thread-safe par défaut.