Heim  >  Artikel  >  Java  >  Detaillierte Analyse des Unterschieds zwischen Wertübergabe und Referenzübergabe in Java

Detaillierte Analyse des Unterschieds zwischen Wertübergabe und Referenzübergabe in Java

WBOY
WBOYOriginal
2024-01-30 08:11:06783Durchsuche

Detaillierte Analyse des Unterschieds zwischen Wertübergabe und Referenzübergabe in Java

Eingehende Analyse des Unterschieds zwischen Wertübergabe und Referenzübergabe in Java

Bei der Java-Programmierung stoßen wir häufig auf die Situation der Parameterübergabe, und es gibt zwei Arten der Parameterübergabe: Wertübergabe und Referenzübergabe. Diese beiden Bereitstellungsmethoden weisen in Java unterschiedliche Eigenschaften und Anwendungsszenarien auf.

Pass-by-Value bezieht sich auf die Übergabe des Werts des tatsächlichen Parameters an den formalen Parameter, wenn die Funktion aufgerufen wird. Änderungen an den formalen Parametern innerhalb der Funktion haben keinen Einfluss auf den Wert des tatsächlichen Parameters. Pass-by-Reference bedeutet, dass beim Aufruf einer Funktion die Referenz des tatsächlichen Parameters an den formalen Parameter übergeben wird. Änderungen an den formalen Parametern innerhalb der Funktion wirken sich auf die tatsächlichen Parameter aus.

Um den Unterschied zwischen der Wertübergabe und der Referenzübergabe besser zu verstehen, schauen wir uns einen einfachen Beispielcode an:

public class PassByValueDemo {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        System.out.println("交换前:num1=" + num1 + ", num2=" + num2);
        swap(num1, num2);
        System.out.println("交换后:num1=" + num1 + ", num2=" + num2);

        Person person1 = new Person("Tom");
        Person person2 = new Person("Jerry");
        System.out.println("交换前:person1=" + person1 + ", person2=" + person2);
        swap(person1, person2);
        System.out.println("交换后:person1=" + person1 + ", person2=" + person2);
    }

    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static void swap(Person p1, Person p2) {
        Person temp = p1;
        p1 = p2;
        p2 = temp;
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

Im obigen Code verwenden wir die Methode swap, um zwei Zahlen und zwei zu vertauschen Der Wert eines Person-Objekts. Im Fall der Wertübergabe erwarten wir, dass die Methode swap in der Lage ist, Zahlen und Werte von Person-Objekten auszutauschen. Nach dem Ausführen des Codes werden wir jedoch feststellen, dass nur die Werte der Zahlen ausgetauscht wurden und sich der Wert des Person-Objekts nicht geändert hat. swap方法来交换两个数字和两个Person对象的值。在进行值传递的情况下,我们期望swap方法能够交换数字和Person对象的值。然而,在运行代码后,我们会发现仅仅交换了数字的值,而Person对象的值并没有发生变化。

这是因为Java中的值传递是将实际参数的值拷贝一份给形式参数,并在函数内部对形式参数进行修改,不会影响到原来的实际参数。所以,在swap(int a, int b)方法中,交换的是ab的值,而不影响num1num2的值。

而对于swap(Person p1, Person p2)方法中的交换,我们期望能够交换person1person2的值。然而,由于Java中的引用传递是将实际参数的引用传递给形式参数,形式参数和实际参数指向同一个对象。而在交换的过程中,我们只是交换了形式参数p1p2的引用,而并没有修改实际参数person1person2指向的对象,所以交换并没有生效。

可以通过以下代码来正确交换Person对象:

public static void swap(Person p1, Person p2) {
    String temp = p1.getName();
    p1.setName(p2.getName());
    p2.setName(temp);
}

在上述代码中,通过调用getName()setName()方法来获取和修改Person

Dies liegt daran, dass die Wertübertragung in Java den Wert des tatsächlichen Parameters in den formalen Parameter kopiert und den formalen Parameter innerhalb der Funktion ändert, ohne den ursprünglichen tatsächlichen Parameter zu beeinflussen. Daher werden in der Methode swap(int a, int b) die Werte von a und b ausgetauscht, ohne dass sich dies auf auswirkt Die Werte von num1 und num2.

Für den Austausch in der Methode swap(Person p1, Person p2) erwarten wir, dass wir die Werte von person1 und austauschen können person2. Da die Referenzübergabe in Java jedoch darin besteht, die Referenz des tatsächlichen Parameters an den formalen Parameter zu übergeben, verweisen der formale Parameter und der tatsächliche Parameter auf dasselbe Objekt. Während des Austauschvorgangs haben wir lediglich die Referenzen der formalen Parameter p1 und p2 ausgetauscht, die tatsächlichen Parameter person1 und person2 zeigt auf das Objekt, sodass der Austausch nicht wirksam wird. 🎜🎜Sie können Person-Objekte korrekt mit dem folgenden Code austauschen: 🎜rrreee🎜Im obigen Code durch Aufrufen von getName() und setName() Methode zum Abrufen und Ändern der Eigenschaftswerte von Person-Objekten, um einen korrekten Objektaustausch zu erreichen. 🎜🎜Zusammenfassend lässt sich sagen, dass die Wertübergabe und die Referenzübergabe zwei verschiedene Parameterübergabemethoden in Java sind. Die Übergabe als Wert ändert den Wert des tatsächlichen Parameters nicht, während die Übergabe als Referenz das Objekt ändert, auf das der tatsächliche Parameter zeigt. Für die Java-Programmierung ist es sehr wichtig, diese beiden Bereitstellungsmethoden zu verstehen und richtig anzuwenden. 🎜

Das obige ist der detaillierte Inhalt vonDetaillierte Analyse des Unterschieds zwischen Wertübergabe und Referenzübergabe in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn