2016-12-15 82 views
0

我有以下代碼:在Java中,我如何傳遞Integer變量作爲參考?

public static void main(String[] args) { 
     Integer testInt = new Integer(100); 
     Integer testInt2 = new Integer(200); 
     System.out.println("Before testInt is " + testInt); 
     System.out.println("Before testInt2 is " + testInt2); 
     swap(testInt, testInt2); 

     //Integer temp = testInt; 
     //testInt = testInt2; 
     //testInt2 = temp; 

     System.out.println("testInt is " + testInt); 
     System.out.println("testInt2 is " + testInt2); 

    } 
    public static void swap(Integer x, Integer y){//x and y point to testInt //and testInt2 
     Integer temp = x;//temp.operator=() or temp->operator()=x 
     x = y; 
     y = temp; 
    } 

我需要交換功能工作。我的理解是,Java通過價值傳遞一切,意味着副本被髮送。在C中,我可以發送testInt和testInt2作爲指針(testInt *,testInt2 *),然後取消引用它們來設置它們的值。我怎樣才能在Java中做到這一點?

這是我目前得到的值(不交換):

Before testInt is 100 
Before testInt2 is 200 
testInt is 100 
testInt2 is 200 

謝謝。

+5

你不能。所有東西都通過Java的價值傳遞,包括引用。 – Kayaman

+0

簡答:你不。你需要一些其他的類,有一個可變的int域。整數不會爲你做。 – yshavit

+0

你不能,這是爲什麼:http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value?rq=1 – DejaVuSansMono

回答

2

把它們放入數組

public static void swap(Integer[] vars){//x and y point to testInt //and testInt2 
     Integer temp = vars[0];//temp.operator=() or temp->operator=x() 
     vars[0] = vars[1]; 
     vars[1] = temp; 
} 
+0

爲什麼這項工作?變量也是一個拷貝到保存這兩個值的實際數組中。 –

+1

不,變量是對實際數組的引用的副本。你不能改變引用('vars = null'),但你可以改變引用對象的狀態('vars [0] = null')。由於'Integer'是不可變的,而Java是按值傳遞的,所以你不能只用'Integer'來完成。然而,可變的AtomicInteger也允許你用'set()'方法交換「詭計」。標記的重複問題對此有很多解釋。 – Kayaman