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