2011-05-18 118 views
7

可能重複:
How to pass by reference in Java傳遞對象通過Java引用

是否有可能通過引用Java

喜歡傳對象在C#中

public static void SomeMethod(ref Object obj) 
{ 
... 
} 
+1

我認爲所有的對象都通過java隱式傳遞給了參數java – snoofkin 2011-05-18 12:28:03

+3

@soul Nope。一切都通過Java的價值傳遞,包括參考 – 2011-05-18 12:28:59

+1

這已被問了幾十次。其中之一是這樣的:[在Java中如何通過引用傳遞](http://stackoverflow.com/questions/5614562/how-to-pass-by-reference-in-java) – 2011-05-18 12:29:26

回答

19

不,就是這樣在Java中不可能。

在Java中,方法的所有參數都是按值傳遞的。請注意,作爲對象引用的非原始類型的變量也按值傳遞:在這種情況下,引用,傳遞值爲。請注意,按值傳遞引用與傳遞引用不同。

+1

您可以傳入一個可變引用的「持有者」對象。一個簡單的實現是一個元素的ArrayList。 通常,您只需要多個輸出,在這種情況下,您可以使用Pair或元組類型。 – karmakaze 2011-05-18 20:31:19

+0

@karmakaze是的,這是一種解決方法,但不可能在Java中獲得真正的按值傳遞,就像存在於C#或C++中那樣。 – Jesper 2011-05-18 20:39:29

+0

@Jesper能否詳細說明通過價值引用和引用傳遞之間的區別?那些對我來說看起來是一樣的。 – 2015-08-05 14:03:00

3

不可以。Java只是按值傳遞。

雖然你不應該要求這樣的事情。您可以傳遞該對象並更改其字段 - 這將反映在調用者中。

12

對象的所有變量都是對象的引用。將對象傳遞給方法時,您已經傳遞了對象的引用。如果您不希望原始對象受到影響,則必須先克隆它。

+0

準確簡潔的答案 – 2017-04-22 17:00:25

0

傳遞參考數據類型參數

參考數據類型參數,例如 爲對象,也傳遞到 方法由值。這意味着當該方法返回 時,傳入的 引用仍像以前一樣引用相同的 對象。但是,如果對象的字段值 具有適當的 訪問級別,則該方法中的值 可以更改爲 。

來源:Java Tutorial>Passing Information to a Method or a Constructor

2

你必須創建一個引用類。幸運的是,有一個。嘗試看看AtomicReference。請注意,它旨在用於併發,因此它可能不適合。

另一個想法是傳遞一個長度爲1的Object數組。