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)
方法中,交换的是a
和b
的值,而不影响num1
和num2
的值。
而对于swap(Person p1, Person p2)
方法中的交换,我们期望能够交换person1
和person2
的值。然而,由于Java中的引用传递是将实际参数的引用传递给形式参数,形式参数和实际参数指向同一个对象。而在交换的过程中,我们只是交换了形式参数p1
和p2
的引用,而并没有修改实际参数person1
和person2
指向的对象,所以交换并没有生效。
可以通过以下代码来正确交换Person
对象:
public static void swap(Person p1, Person p2) { String temp = p1.getName(); p1.setName(p2.getName()); p2.setName(temp); }
在上述代码中,通过调用getName()
和setName()
方法来获取和修改Person
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!