Domo ist Fugito. Diesmal über endgültige Variablen und unveränderliche Objekte Ich habe es zusammen versucht.
Eine endgültige Variable ist eine Variable, für die der endgültige Modifikator angegeben ist. Seine Natur heißt "unveränderlich / schreibgeschützt" Streng genommen jedoch "** nicht neu zuweisbare Variable **".
final int i = 3;
i = 5; // Kompilierungsfehler aufgrund einer Neuzuweisung
Oben ist final für die Variable i vom Basistyp (int type) angegeben. Bei grundlegenden Typvariablen bleibt der "Wert selbst" im Wert der Variablen erhalten. Es ist eine Variable (Einzelheiten finden Sie unter "Zuordnung der Basistypvariablen und Zuordnung der Referenztypvariablen". Unterschiede ”). Daher wird der "Wert selbst" ersetzt. Eine Neuzuweisung führt zu einem Kompilierungsfehler. Das heißt, der Grundtyp In Bezug auf Variablen sind endgültige Variablen "unveränderlich". sieht aus wie. Was verwirrend ist, ist die endgültig angegebene Referenzvariable.
final StringBuilder sb = new StringBuilder("123");
sb = neuer StringBuilder ("456"); // Kompilierungsfehler
final StringBuilder sb2 = new StringBuiler("789");
sb.append ("★"); // Kein Kompilierungsfehler!
System.out.println (sb2); // "789 ★" wird ausgegeben
Im obigen Beispiel manipulieren wir die Referenzvariablen sb und sb2. Wenn Sie verstehen, dass die Art der endgültigen Variablen "unveränderlich" ist, Die Operation zu sb führt zu einem Fehler und die Operation zu sb2 nicht. Ich verstehe die Bedeutung von nicht. Wenn Sie sich nun an den Wert erinnern, den die Referenztypvariable enthält, Dies war ein "Verweis auf ein Objekt". Das heißt, jdn und sb2 hat "Werte selbst" wie "123" und "789" ist nicht. Was sie (?) Haben, ist "" 1 23 (456) "Ein Verweis auf ein Objekt, das sich in einem Zustand befindet". Betrachten Sie diesen Mechanismus und die strikte Definition der endgültigen Variablen als "nicht neu zuweisbar". Wenn Sie es eingeben, können Sie das obige Beispiel verstehen. Das ist, Die Operation "sb = new StringBuilder (" 456 ")" für jdn Ist die Operation "** den Wert der neuen Referenz neu zu jd ** zuweisen". Yo Aufgrund der Art der endgültigen Variablen tritt dann ein Kompilierungsfehler auf. auf der anderen Seite, Operation von "sb2.append (" ★ ")", die den Status "**" 789 "hat. Ändern Sie den Status des Objekts in den Status "789 ★" ** " Es wird eine Arbeit sein. Kurz gesagt, von "Referenzwert zum Objekt" zu sb2 Es ist keine Neuzuweisung erfolgt. Daher tritt kein Fehler auf.
Während die endgültige Variable die Eigenschaft "nicht neu zuweisbar" hat, ist sie ein unveränderliches Objekt. Kut verbietet auch "das Ändern des Zustands von Objekten". Mit anderen Worten Die Operation "sb.append (" ★ ")" im obigen Beispiel ist ebenfalls nicht möglich. Es ist ein unveränderliches Objekt.
** - Die endgültige Variable hat die Eigenschaft "nicht neu zuweisbar". -Wenn die Referenztypvariable endgültig angegeben wird, lautet "Referenzziel ändern" Ich kann nicht, aber "Ändern Sie den Status des ersten referenzierten Objekts Kann gewechselt werden -Kann nicht "den Status des ersten referenzierten Objekts ändern" Nennen Sie das Objekt ein "unveränderliches Objekt" **
... Dann diesmal hier. Es war Fugi.
(S.) Wenn Sie Vorschläge für den Inhalt des Artikels haben Bitte zögern Sie nicht, mich m (_ _) m zu informieren
Recommended Posts