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
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.
Ä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.
name
neu verweist.Ich kann nicht mehr sagen, dass es als Referenz übergeben wurde
Recommended Posts