Java 的「按值傳遞」與「按引用傳遞」區別
在Java 中,變數儲存對物件的引用,而不是對象本身他們自己。這種差異會影響物件作為參數傳遞給方法的方式。
場景A:傳遞引用
考慮以下程式碼片段:
Foo myFoo; myFoo = createFoo(); public Foo createFoo() { Foo foo = new Foo(); return foo; }
當myFoo被指派createFoo()的結果時,一個新的Foo物件被創建並分配給foo。引用變數 myFoo 現在指向這個新物件。如果隨後修改 myFoo,則變更將影響原始 Foo 物件。但是,如果將新的引用變數指派給 myFoo,它將指向不同的物件。
場景B:傳遞值
將此與以下內容進行對比:
Foo myFoo; createFoo(myFoo); public void createFoo(Foo foo) { Foo f = new Foo(); foo = f; }
在這種情況下,方法createFoo()接收對myFoo 的引用。然而,在該方法中,建立了一個新的 Foo 物件並將其指派給本地引用變數 f。 foo = f 行僅更改方法內的引用,而不更改儲存在呼叫方法中的引用。因此,方法中對 foo 所做的任何修改都不會反映在原始 Foo 物件中。
結論
根據這些範例,很明顯 Java 總是透過按值而不是按引用進行參數。傳遞的值是對物件的引用,而不是物件本身。因此,對方法內的引用變數所做的變更不會影響原始物件。但是,透過引用對物件本身所做的更改將反映在原始物件中。
以上是Java 是按值還是按引用傳遞物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!