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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-30 14:45:16447瀏覽

Does Java Pass Parameters by Reference or by Value?

在Java 中透過引用傳遞參數

在Java 中,每個參數都是按值傳遞的,這可能看起來違反直覺,特別是如果您來自C# 等支持引用傳遞的語言。但是,其語義在本質上略有不同。

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 引用不同,支援按值傳遞語義。

真實引用傳遞的選項

要實現真正的按引用傳遞行為,可以使用以下方法:

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

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

在這種情況下, AtomicReference 提供了物件的包裝器,它的參考真正是按值傳遞的。對 mutate() 內的引用進行賦值將影響方法外部的引用,從而產生所需的引用傳遞行為。

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

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