Maison >Java >javaDidacticiel >Comparaison finale et immuabilité en Java
Le mot-clé "final" en Java peut être utilisé pour définir des valeurs constantes et empêcher la modification ou le remplacement de variables, de méthodes ou de classes. L'immuabilité, quant à elle, décrit la caractéristique d'un objet restant dans un état constant tout au long de son existence. Une fois qu’un objet est formé, sa valeur ne change pas.
Les variables, méthodes et classes sont restreintes par le mot-clé "final", mais l'immuabilité va encore plus loin et garantit que l'état complet de l'objet est préservé.
Comprenons les principales différences entre final et immuable dans cet article.
Le mot-clé final en Java a plusieurs caractéristiques :
Variable finale : Sa valeur initiale ne peut pas être modifiée après initialisation. Ils sont souvent utilisés pour déclarer des valeurs immuables ou immuables.
Méthodes finales : elles ne peuvent pas être modifiées par les sous-classes, garantissant ainsi leur comportement cohérent. Ils aident à maintenir l’efficacité des procédures importantes.
Classes finales : elles ne peuvent pas être étendues par d'autres classes et leur mise en œuvre est garantie de ne pas être modifiée. Les classes finales sont souvent utilisées pour créer des classes de sécurité ou d'utilitaires.
Initialisation : Pour garantir que la variable finale a une valeur connue, il faut lui attribuer une valeur lors de la déclaration ou dans le constructeur.
Performances : L'utilisation de final permet au compilateur d'optimiser le code avec plus de succès, améliorant potentiellement les performances.
Sécurité : Final améliore la sécurité des programmes Java en empêchant les modifications non autorisées des données ou des comportements sensibles.
En Java, une classe immuable est une classe dont le contenu d'un objet ne peut pas être modifié une fois créé. Pour créer une classe immuable, suivez ces exigences :
Déclarez les classes comme Final pour éviter l'héritage.
Déclarez les données membres d'une classe comme privées pour restreindre l'accès direct.
Déclarez les données membres comme finales pour empêcher toute modification après la création de l'objet.
Utilisez des constructeurs paramétrés pour initialiser tous les champs via une copie complète, empêchant ainsi toute modification via une référence d'objet.
Renvoyer une copie (copie complète) de l'objet dans la méthode getter au lieu de la référence réelle de l'objet pour maintenir l'immuabilité.
En suivant ces caractéristiques, vous pouvez créer vos propres classes immuables en Java, similaires aux classes immuables intégrées comme Integer, Boolean, Byte, Short et String.
En matière de programmation Java, il est crucial de comprendre la différence entre « final » et « immuable ».
Final : conserver les références d'objet et autoriser les mutations d'état
Commençons par "Final". Lorsqu'un objet ou une variable est marqué final en Java, cela signifie que la référence ne peut pas être modifiée pour pointer vers un autre objet ou variable après lui avoir donné une valeur. Il est important de se rappeler que même si la référence est fixe, l'utilisation de la méthode setter associée vous permet toujours de modifier l'état de l'objet. Ainsi, même si la référence elle-même ne peut pas être modifiée, vous pouvez toujours utiliser des méthodes accessibles pour modifier les propriétés internes de l'objet. En d’autres termes, final assure la stabilité d’une référence d’objet tout en permettant de modifier son état interne.
Immuable : valeurs immuables et flexibilité des références
Tournons maintenant notre attention vers « immuable ». En Java, l'immuabilité signifie que la valeur réelle d'un objet ne peut pas être modifiée après sa création. Cependant, contrairement à Final, vous pouvez modifier la référence elle-même et l'attribuer à un autre objet ou variable. Cela signifie que même si la valeur de l'objet reste la même, vous pouvez modifier sa référence pour pointer vers une instance différente.
Application et portée : Final et immuabilité
Le modificateur "final" s'applique aux variables en Java et non aux objets. Il met l'accent sur les restrictions sur la modification des références ou des variables tout en permettant la modification de l'état de l'objet. L'immuabilité, en revanche, s'applique aux objets, indiquant que leurs valeurs ne peuvent pas être modifiées une fois créées. Il est important de comprendre la différence entre ces deux concepts pour garantir que les programmes Java se comportent comme prévu.
Signification : Adresse d'objet et variabilité d'état
Lorsque l'on déclare un objet ou une variable comme final, on force la permanence de son adresse. En d’autres termes, la référence reste fixe, empêchant toute modification de l’emplacement vers lequel elle pointe. En revanche, l’immuabilité souligne qu’une fois qu’un objet est créé, son état ne peut plus être modifié. Cela signifie que les valeurs internes de l'objet ne peuvent pas être modifiées, conservant ainsi son intégrité et sa cohérence tout au long de l'exécution du programme.
Ce code démontre la différence entre le mot-clé "final" et l'immuabilité en Java. Le mot clé "final" rend une variable constante et empêche toute réaffectation, tandis que l'immuabilité signifie que l'objet lui-même ne peut pas être modifié.
Étape 1 : Déclarez la variable "sb" comme objet StringBuffer final avec la valeur initiale "Hello".
Étape 2 : utilisez la méthode append() pour ajouter « TP » à l'objet StringBuffer référencé par « sb ».
Étape 3 : Imprimez la valeur mise à jour de "sb", qui est "HelloTP".
Étape 4 : Essayer de réaffecter le nouvel objet StringBuffer à la variable "sb", ce qui entraîne une erreur de compilation.
Étape 5 : Imprimez la valeur de "sb", mais en raison de l'erreur de l'étape précédente, cette ligne ne sera pas exécutée.
// Java program to illustrate difference between final and immutability public class Tutorialspoint { public static void main(String[] args) { final StringBuffer sb = new StringBuffer("Hello"); // We can make changes even though reference variable sb is final sb.append("TP"); System.out.println(sb); // Compile time error will appear here. This is because the final variable cannot be reassigned sb = new StringBuffer("Hello World"); System.out.println(sb); } }
Tutorialspoint.java:16: error: cannot assign a value to final variable sb sb = new StringBuffer("Hello World"); ^ 1 error
Pour résumer, « finalité » et immuabilité ont des caractéristiques très différentes en Java. Le mot clé "final" restreint la réallocation des références d'objet mais permet de modifier l'état de l'objet.
En revanche, l'immuabilité empêche la valeur d'un objet de changer, mais permet de réaffecter les références. Comprendre l'application et la portée du « final » et de l'immuabilité est important pour concevoir des programmes Java fiables. Lorsqu'un objet ou une variable est déclaré final, son adresse reste fixe, tandis que l'immuabilité garantit que les valeurs internes de l'objet ne peuvent pas être modifiées. L'exemple de code montre la différence, où « final » empêche la réallocation, provoquant une erreur de compilation.
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!