首頁 >後端開發 >C++ >Java 是按值傳遞還是按引用傳遞?

Java 是按值傳遞還是按引用傳遞?

Susan Sarandon
Susan Sarandon原創
2024-12-31 16:18:10417瀏覽

Is Java Pass-by-Value or Pass-by-Reference?

理解 Java 的值傳遞語意

在 Java 中,所有參數都是按值傳遞的,包括引用類型。這意味著傳遞給該方法的是引用的實際值,而不是引用本身。這可能會令人困惑,因為看起來引用是按引用傳遞的,因為對參數引用的物件所做的任何更改都將反映在原始物件中。

但是,這不是真正的按引用傳遞行為。以下範例示範了這一點:

Object o = "Hello";
mutate(o);
System.out.println(o);

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

執行此程式碼後,輸出將為「Hello」。這是因為 mutate 方法接收原始物件參考的副本,而不是原始物件本身。當執行 o = "Goodbye" 行時,它改變了 mutate 方法內部的引用變數 o,但不影響方法外部的原始 o 變數。

要實現真正的按引用傳遞行為,一種選擇是使用明確引用,如下所示:

AtomicReference<Object> ref = new AtomicReference<>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

在這種情況下,AtomicReference 包裝器保存對原始對象的引用。當 mutate 方法接收到 ref 參數時,它可以直接存取原始對象,並且對該對象所做的任何更改都會反映在方法外的原始對像中。

以上是Java 是按值傳遞還是按引用傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn