Domo est Fugito. Cette fois sur les variables finales et les objets immuables J'ai essayé ensemble.
Une dernière variable est une variable pour laquelle le modificateur final est spécifié. Sa nature est appelée "immuable / lecture seule" Cependant, à proprement parler, "** variable non réattribuable **".
final int i = 3;
i = 5; // Erreur de compilation due à une réaffectation
Dans ce qui précède, final est spécifié pour la variable de type de base (type int) i. Pour les variables de type de base, la "valeur elle-même" est conservée dans la valeur de la variable. C'est une variable (Pour plus de détails, voir "Affectation de variable de type de base et affectation de variable de type de référence. Différences ”). Par conséquent, la «valeur elle-même» est remplacée. La réaffectation entraînera une erreur de compilation. Autrement dit, le type de base En ce qui concerne les variables, les variables finales sont "immuables" ressemble à. Ce qui est déroutant, c'est la variable de référence finale spécifiée.
final StringBuilder sb = new StringBuilder("123");
sb = new StringBuilder ("456"); // Erreur de compilation
final StringBuilder sb2 = new StringBuiler("789");
sb.append ("★"); // Aucune erreur de compilation!
System.out.println (sb2); // "789 ★" est affiché
Dans l'exemple ci-dessus, nous manipulons les variables de référence sb et sb2. Ici, si vous comprenez que la nature de la variable finale est "immuable", L'opération sur sb entraîne une erreur et l'opération sur sb2 ne le fait pas. Je ne comprends pas la signification de. Maintenant, si vous rappelez la valeur détenue par la variable de type référence, C'était une "référence à un objet". Autrement dit, qn et sb2 a des "valeurs elles-mêmes" telles que "123" et "789" n'est pas. Ce qu'ils (?) Ont est "" 1 23 (456) «Une référence à un objet qui est dans un état». Considérez ce mécanisme et la définition stricte des variables finales «non réassignables» Si vous le mettez, vous pouvez comprendre l'exemple ci-dessus. C'est, L'opération "sb = new StringBuilder (" 456 ")" pour sb, ceci L'opération "** réaffecte-t-elle la valeur de la nouvelle référence à sb ". Yo Ensuite, en raison de la nature de la variable finale, une erreur de compilation se produit. d'autre part, Fonctionnement de "sb2.append (" ★ ")", qui a l'état "" 789 " Changer l'état de l'objet en l'état "789 ★" ** " Ce sera un travail. En bref, de "valeur de référence à objet" à sb2 Aucune réaffectation n'a eu lieu. Par conséquent, aucune erreur ne se produit.
Alors que la variable finale a la propriété «non réassignable», c'est un objet immuable. Kut interdit également "de changer l'état des objets". En d'autres termes Le fonctionnement de "sb.append (" ★ ")" dans l'exemple ci-dessus n'est pas non plus possible. C'est un objet immuable.
** - La variable finale a la propriété "non réattribuable" -Si la variable de type de référence est finalement spécifiée, "Changer la destination de référence" sera Je ne peux pas, mais "Changer l'état du premier objet référencé Peut être changé -Impossible de "changer l'état du premier objet référencé" Appelez l'objet un "objet immuable" **
... Puis cette fois par ici. C'était Fugi.
(P.S.) Si vous avez des suggestions pour le contenu de l'article N'hésitez pas à me le faire savoir m (_ _) m
Recommended Posts