Heim >Backend-Entwicklung >C++ >Ist Java Pass-by-Value oder Pass-by-Reference?
In Java werden alle Parameter als Wert übergeben, einschließlich Referenztypen. Dies bedeutet, dass der tatsächliche Wert der Referenz und nicht die Referenz selbst an die Methode übergeben wird. Dies kann verwirrend sein, da es den Anschein hat, dass Referenzen per Referenz übergeben werden, da alle Änderungen, die an dem durch den Parameter referenzierten Objekt vorgenommen werden, im ursprünglichen Objekt widergespiegelt werden.
Dies ist jedoch kein echtes Verhalten bei der Übergabe per Referenz . Das folgende Beispiel zeigt dies:
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!
Nach der Ausführung dieses Codes lautet die Ausgabe „Hallo“. Dies liegt daran, dass die Mutate-Methode eine Kopie des Verweises auf das Originalobjekt erhält, nicht das Originalobjekt selbst. Wenn die Zeile o = „Goodbye“ ausgeführt wird, ändert sie die Referenzvariable o innerhalb der mutate-Methode, hat jedoch keinen Einfluss auf die ursprüngliche o-Variable außerhalb der Methode.
Um ein echtes Pass-by-Reference-Verhalten zu erreichen, Eine Möglichkeit besteht darin, eine explizite Referenz wie folgt zu verwenden:
AtomicReference<Object> ref = new AtomicReference<>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
In diesem Fall enthält der AtomicReference-Wrapper eine Referenz auf das Originalobjekt. Wenn die Mutate-Methode den Ref-Parameter empfängt, hat sie direkten Zugriff auf das Originalobjekt und alle am Objekt vorgenommenen Änderungen werden im Originalobjekt außerhalb der Methode widergespiegelt.
Das obige ist der detaillierte Inhalt vonIst Java Pass-by-Value oder Pass-by-Reference?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!