In Java gibt es zwei Parameterübergabemechanismen: Übergabe nach Wert und Übergabe nach Adresse.
Wenn ein Basistyp als Parameter übergeben wird, handelt es sich um eine Kopie des übergebenen Werts. Unabhängig davon, wie Sie diese Kopie ändern, ändert sich der ursprüngliche Wert nicht -nach Wert.
Durch die Übergabe eines Objekts als Parameter wird eine Kopie der Objektadresse im Speicher kopiert und an den Parameter übergeben, es handelt sich um eine Übergabeadresse.
public static void main(String[] args) { int n =3; // ① System.out.println(n); // 3 chageData(n); // ② System.out.println(n); // 3}public static void chageData(int num){ num = 10; // ③}
Beobachten Sie die Ausgabe und stellen Sie fest, dass sich der Wert von n nicht geändert hat.
Da n und num Grundtypen sind, werden die Werte direkt in Variablen gespeichert.
Das Flussdiagramm ist wie folgt (entsprechend ①②③ im Code):
Erster Blick auf das String-Beispiel:
public static void main(String[] args) { String str = "hello"; // ① System.out.println(str); // hello chageData(str); //② System.out.println(str); // hello}public static void chageData(String s){ s ="world"; // ③}
Bei der Beobachtung der Ergebnisse haben wir festgestellt, dass sich str nicht geändert hat. Hier ist eine Analyse basierend auf dem Flussdiagramm:
Nachdem ① ausgeführt wurde, wird im Heap eine Objektreferenzstr generiert, die den Adressindex enthält, der auf den Speicher verweist. Das echte String-Objekt
generiert die Objektreferenz s in ② und erhält durch die Pass-by-Referenz auch den Adressindex „Hallo“.
Ordnen Sie die Objektreferenzen in ③ neu zu. Es liegt auf der Hand, dass der Wert des Objekts aus „Hallo“ -> „Welt“ stammen sollte. Aufgrund der Unveränderlichkeit von String wird jedoch ein neues Objekt erstellt, da ein neues Objekt erstellt wird, sobald sich String ändert.
Sehen Sie sich das Beispiel von StringBuffer an:
public static void main(String[] args) { StringBuffer stb = new StringBuffer("hello"); // ① System.out.println(stb); // hello chageData(stb); // ② System.out.println(stb); // hello world}public static void chageData(StringBuffer s){ s.append("world"); // ③} }
Beobachten Sie die Ergebnisse und stellen Sie fest, dass sich stb geändert hat, weil StringBuffer Das Objekt ist veränderbar und durch Ändern seines Inhalts wird kein neues Objekt erstellt
Das Obige ist der Inhalt von 14. Java-Grundlagen – Parameterübergabe, bitte achten Sie auf weitere Verwandte Inhalte PHP chinesische Website (www.php.cn)!