在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中文網其他相關文章!