Java als Wert übergeben und als Referenz übergeben

Grundtyp

Die Werte, die den Argumenten von Java-Methoden gegeben werden, werden grundsätzlich als Wert übergeben. Die Übergabe als Wert bedeutet, dass der dem Argument angegebene Wert kopiert wird. Wenn also Änderungen an den Argumenten in der Methode vorgenommen werden, werden Änderungen an der Kopie der Argumente vorgenommen.

Daher können Sie verstehen, dass die Bewegung wie folgt ist.

Das am einfachsten zu verstehende Programm zum Übergeben von Werten


int count = 8;
plus(count);
Log.d(count);

void plus(int value) {
    int result = value * 2;
    Log.d(result);
}

Ergebnis


after applying plus 16
outside of method plus 8

Referenztyp

Wenn Sie einen Referenztyp als Argument übergeben, wird der Referenzwert kopiert.

Im folgenden Code ist die linke Seite der Referenzwert und die rechte Seite der tatsächliche Wert. Der Referenzwert auf der linken Seite ist beispielsweise die Adresse des Speichers, in dem der tatsächliche Wert auf der rechten Seite gespeichert ist.

List<String> list = new ArrayList<>();

Es gibt eine kaiserliche Residenz in "1-1 Chiyoda, Chiyoda-ku, Tokio". "1-1 Chiyoda, Chiyoda-ku, Tokio" ist der Referenzwert, und der Kaiserpalast ist wie der tatsächliche Wert.

Auf der Grundlage des oben Gesagten möchte ich das folgende Programm betrachten.

Ein Programm, in dem Änderungen an einer Methode auch nach Anwendung der Methode wiedergegeben werden


List<String> japanese = new ArrayList<>();
japanese.add("Zu viel");
plusElementJ(japanese);
Log.d(japanese.toString());

void plusElementJ(List<String> list) {
    list.add("Guten Morgen");
    Log.d(list.toString());
}

Ergebnis


[Zu viel,Guten Morgen]
[Zu viel,Guten Morgen]

Im obigen Programm erklärt die 12. Zeile, dass es eine kaiserliche Residenz in "1-1 Chiyoda, Chiyoda-ku, Tokio" gibt. Geben Sie die Adresse "1-1 Chiyoda, Chiyoda-ku, Tokio" an die Methode weiter. Innerhalb der Methode haben wir die Adresse, die wir erhalten haben, erweitert. Selbst wenn ich mich von der Methode verabschiedete, war ich überzeugt, dass es eine Folge der Erweiterung des Kaiserpalastes in "1-1 Chiyoda, Chiyoda-ku, Tokio" gab.

String ist auch ein Referenztyp. .. ..

Änderungen an der Methode werden nach Anwendung der Methode nicht berücksichtigt


String name = "Zu viel";
concatenate(name);
Log.d(name);

void concatenate(String name) {
    name = "Guten Morgen," + name;
    Log.d(name);
}

Ergebnis


nach dem Auftragen verketten Guten Morgen, zu viel
auch außerhalb der Methode verketten

String ist ein Referenztyp, aber unveränderlich. Das heißt, es kann nicht geändert werden. Erstellt dieser Prozess nicht intern ein neues String-Objekt, wie unten gezeigt?

name = new String("Guten Morgen,"  + name)

Daher denke ich, dass die folgenden Dinge passieren.

  1. Dem kopierten Referenzwert "Name" wird ein neuer Referenzwert zugewiesen
  2. Ein neues Objekt wird mit dem Referenzwert erstellt, auf den name neu verweist.

Referenz

Ich kann nicht mehr sagen, dass es als Referenz übergeben wurde

Recommended Posts

Java als Wert übergeben und als Referenz übergeben
Java "Pass by Reference" Problemzusammenfassung
Gibt an, ob Java-Argumente als Wert oder als Referenz übergeben werden
Grundlegende Datentypen und Referenztypen (Java)
Java-Referenzmechanismus (Stack und Heap)
Informationen zu primitiven Java-Typen und Referenztypen
Java-Basisdatentypen und Referenztypen
Seitenzahllogik und Referenzcode (Java)
Java8-Methodenreferenz
Java und JavaScript
XXE und Java
Java8-Methodenreferenz
JAVA Referenzmaterialien
Meine Java-Referenz
Beschreiben in mehreren Methoden So übergeben Sie Argumente So verwenden Sie den Rückgabewert Methodenüberladung Übergeben von Wert und Übergeben von Referenz
[Java] Das Referenzwort ist schlecht!
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
Getter und Setter (Java)
[Java] Thread und ausführbar
Java wahr und falsch
[Java] Vergleich von Zeichenketten und && und ||
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
Verstehen Sie den Fehler, indem Sie ihn implementieren und analysieren. (1) Deadlock (Java)
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
Informationen zum Java-Grunddatentyp- und Referenztypspeicher
timedatectl und Java TimeZone
[Java] Verzweigen und Wiederholen
[Java] Variablen- und Typtypen
Java (Klasse und Instanz)
Versuchen Sie es mit dem Java-Rückgabewert
[Java] Überladen und überschreiben
Einführung in effektives Java durch Üben und Lernen (Builder-Muster)
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
Verstehen Sie das Singleton-Muster, indem Sie Java- und JavaScript-Code vergleichen
Empfehlung der Set-Operation durch Java (und Verständnis von Equals und HashCode)
[Java] Unterschied zwischen der Zuweisung der Basistypvariablen und der Zuordnung der Referenztypvariablen
Gleiches Urteil / gleichwertiges Urteil / Vergleich / Reihenfolge in Swift und Java
Verstehen Sie das Iterator-Muster, indem Sie Java- und JavaScript-Code vergleichen
Studiere Java # 2 (\ mark and operator)
[Java] Integer-Wrapper-Klassenreferenz
Basisdatentyp und Referenztyp
Java VB.net-Dienstreferenz auf halbem Weg
[Java] Unterschied zwischen == und gleich
Verschluss der Pony- und Referenzfähigkeit
[Java] Stapelbereich und statischer Bereich
[Java] Generics-Klasse und Generics-Methode
Java-Ver- und Entschlüsselung PDF
Java und Iterator Teil 1 Externe Iterator Edition
Java if- und switch-Anweisungen
Objektorientierte Zusammenfassung von Anfängern (Java)
Apache Hadoop und Java 9 (Teil 1)
[Java] Über String und StringBuilder
So ändern Sie das Argument in der [Java] -Methode (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind)
[Java] HashCode und gleich Überschreibung
☾ Java / Repeat-Anweisung und Repeat-Steueranweisung
Java SE8 Silver Passing Erfahrung
Java-Methoden und Methodenüberladungen
Java Generics T und? Unterschied