Heim  >  Artikel  >  Java  >  Parameterübergabe in Java (nur Wertübergabe, keine Referenzübergabe)

Parameterübergabe in Java (nur Wertübergabe, keine Referenzübergabe)

(*-*)浩
(*-*)浩nach vorne
2019-08-17 16:30:562882Durchsuche

Warum ist es möglich, den Attributwert einer Referenzvariablen zu ändern? Bitte sehen Sie sich die Antwort unten an.

Parameterübergabe in Java (nur Wertübergabe, keine Referenzübergabe)

Datentypen in Java

Datentypen in Java werden in zwei Kategorien unterteilt: Basistypen und Referenztypen. Dementsprechend werden Variablen auch in zwei Typen unterteilt: Basistypen und Referenztypen.

Basistypvariablen speichern den ursprünglichen Wert, dh der Wert, den sie darstellt, ist der Wert selbst

Der von der Referenztypvariable gespeicherte Wert ist ein Referenzwert und der „Referenzwert“. „Zeigt auf die Adresse des Speicherplatzes und stellt einen Verweis auf ein Objekt dar und nicht auf das Objekt selbst. Das Objekt selbst wird an der durch den Referenzwert dargestellten Adresse gespeichert.

Zu den Grundtypen gehören: Byte, Short, Int, Long, Char, Float, Double, Boolean, ReturnAddress.

Zu den Referenztypen gehören: Klassen, Schnittstellentypen und Arrays.

Es gibt nur eine Wertübertragung in Java

Beim täglichen Codieren werden Sie häufig das folgende Phänomen sehen:

1. Für grundlegende Typparameter: in der Methode Durch die Neuzuweisung von Parametern innerhalb des Körpers wird der Wert der ursprünglichen Variablen nicht geändert.

2. Bei Referenztypparametern wird durch die erneute Zuweisung einer Referenz auf den Parameter im Methodenkörper die von der ursprünglichen Variablen gehaltene Referenz nicht geändert.

3. Die Parameter werden innerhalb des Methodenkörpers bearbeitet, ohne den Wert der ursprünglichen Variablen zu ändern.

4. Bei Referenztypparametern bearbeitet der Methodenkörper die Eigenschaften des Objekts, auf das der Parameter zeigt, wodurch sich der Eigenschaftswert des Objekts ändert, auf das die ursprüngliche Variable zeigt.

Zum Beispiel:

public class Main {
    private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){
        b = true;
        boo = new Boolean(true);
        arr[0] = true;
    }
       //测试
    public static void main(String[] args) {
        boolean b = false;
        Boolean boo = new Boolean(false);
        Boolean[] arr = new Boolean[]{false};
        getMiddleOne(b, boo, arr);
        System.out.println(b);
        System.out.println(boo.toString());
        System.out.println(arr[0]);
        /**
        * output:
        * false
        * false
        * true
        */
    }
}

Wir können das obige Phänomen beantworten, solange wir die folgenden zwei Punkte verstehen:

1 value ist der Wert selbst, daher ist der Wert von b im Beispiel falsch; da die Wrapper-Klasse automatisch ein- und auspackt, kann er auf die gleiche Weise wie der Basistyp verarbeitet werden, sodass der Wert von boo im Beispiel falsch ist ; Das Array ist ein Referenztyp, also arr Der Wert ist eine Referenz auf den Boolean[].

2. In Java gibt es nur eine Wertübertragung und keine Referenzübertragung, daher sind die drei an die getMiddleOne-Methode übergebenen Parameter die Wertkopie von b, die Wertkopie von boo und die Wertkopie von arr.

Wie aus den beiden obigen Punkten ersichtlich ist, weisen b=true und boo = new Boolean(true) in der getMiddleOne-Methode ihren Kopien neue Werte zu, sodass der Wert der ursprünglichen Variablen nicht vorhanden ist ; In ähnlicher Weise kopiert arr[0] = true das erste Element des Arrays, auf das die Kopie von arr zeigt von arr zeigt auf Das Array und das Array, auf das arr zeigt, sind identisch, daher wirkt sich das Ändern der Elemente des von arr kopierten Arrays auch auf die ursprüngliche Variable arr aus.

Zusammenfassung

In Java gibt es nur eine Wertübertragung. Basistypen übertragen eine Kopie des Werts und Referenztypen übertragen eine Kopie der Referenz

Das obige ist der detaillierte Inhalt vonParameterübergabe in Java (nur Wertübergabe, keine Referenzübergabe). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen