[Java] Unterschied zwischen "endgültiger Variable" und "unveränderlichem Objekt"

Domo ist Fugito. Diesmal über endgültige Variablen und unveränderliche Objekte Ich habe es zusammen versucht.

letzte Variable

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.

Unveränderliches Objekt

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.

Zusammenfassung

** - 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

[Java] Unterschied zwischen "endgültiger Variable" und "unveränderlichem Objekt"
Unterschied zwischen final und Immutable in Java
[Java] Unterschied zwischen == und gleich
[Java] Unterschied zwischen statischem final und final in Mitgliedsvariablen
[Java] Unterschied zwischen Hashmap und HashTable
Unterschied zwischen Instanzvariable und Klassenvariable
[JAVA] Unterschied zwischen Abstract und Interface
[Java] Unterschied zwischen Array und ArrayList
[Java] Unterschied zwischen Closeable und AutoCloseable
[Java] Unterschied zwischen StringBuffer und StringBuilder
[Java] Unterschied zwischen Länge, Länge () und Größe ()
[Java] Unterschied zwischen der Zuweisung der Basistypvariablen und der Zuordnung der Referenztypvariablen
[Für Anfänger] Unterschied zwischen Java und Kotlin
[Java] Unterschied zwischen Intstream-Bereich und rangeClosed
Unterschied zwischen int und Integer in Java
[Java] Verstehe den Unterschied zwischen List und Set
[Java] Unterschied zwischen "endgültiger Variable" und "unveränderlichem Objekt"
Variable
statische Variable
Unveränderlich (unveränderlich) Listet die Objektkonvertierungsfunktion in Java8 auf
Unterschied zwischen vh und%
Unterschied zwischen i ++ und ++ i
Über Java-Setter und Getter. <Unterschied zur Objektorientierung>
[Java-Anfänger] Unterschied zwischen Länge und Länge () ~ Ich weiß nicht ~
Unterschied zwischen CUI und GUI
Unterschied zwischen Variablen und Instanzvariablen
Unterschied zwischen Mockito-Core und Mockito-All
Unterschied zwischen Bundle und Bundle-Installation
Unterschied zwischen render und redirect_to
Unterschied zwischen List und ArrayList
Java Generics T und? Unterschied
Unterschied zwischen .bashrc und .bash_profile
Unterschied zwischen StringBuilder und StringBuffer
Unterschied zwischen render und redirect_to
[Docker-compose] Unterschied zwischen env_file und Umgebung. Informationen zur Priorität der Anwendung von Umgebungsvariablen
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
[Java] Unterschied zwischen Stapelüberlauffehler und Speichermangel
Ist die Kurzschlussauswertung wirklich schnell? Unterschied zwischen && und & in Java
[Ruby] Unterschied zwischen get und post
Unterschied zwischen Instanzmethode und Klassenmethode
Unterschied zwischen == Operator und Methode gleich
Unterschiede zwischen "Anfänger" Java und Kotlin
Deklaration, Initialisierung und Typen von Java-Variablen
[Terminal] Unterschied zwischen irb und pry
JavaServlet: Unterschied zwischen executeQuery und executeUpdate
[Ruby] Unterschied zwischen is_a? Und instance_of?
Unterschied zwischen dem Operator == und der Methode eqals
Grober Unterschied zwischen RSpec und Minitest
[Rails] Unterschied zwischen find und find_by
[Java] Beziehung zwischen H2DB und JDBC
Unterschied zwischen Thymeleaf @RestController und @Controller
Unterschied zwischen Stream Map und FlatMap
Unterschied zwischen primitivem Typ und Referenztyp
Unterschied zwischen string.getByte () und Hex.decodeHex (string.toCharaArray ())
Unterschiede zwischen Java und .NET Framework
[Rails] Unterschied zwischen redirect_to und Rendern