2015-08-21 33 views
0

整型如何更改掉在swap2()功能i,j值:如何交換在Java

enter code here public class pass_by_ref { 
     public static void swap(Integer i, Integer j) //this will not change i j values in main 
     { 
     Integer temp = new Integer(i); 
     i = j; 
     j = temp; 
     } 
     public static void swap2(Integer i, Integer j) 
     { 
     i = 20; //as i am setting i value to 20 why isn't it reflected in main and same for j 
     j = 10; 
     } 
     public static void main (String[] args) throws java.lang.Exception 
     { 
     Integer i = new Integer(10); 
     Integer j = new Integer(20); 
     swap(i, j); 
     System.out.println("i = " + i + ", j = " + j); 
     swap2(i, j); 
     System.out.println("i = " + i + ", j = " + j); 
     } 
     } 

輸出:

 i=10,j=20 
     i=10,j=20; 

我認爲Integer i=new Integer(10)值爲10創建一個對象i ,所以當我寫i=20;j=10swap2()我設置了值!所以爲什麼它不工作 我知道swap()將不會更改i,j值,但爲什麼不是swap2()不工作? 那麼在swap2()中做什麼更改,以便值被交換。

+0

你不能。 Java是通過價值傳遞的。寫一個方法來做到這一點是不可能的。 –

+0

我可以用2 Integer i和j做一個類,然後創建該類的一個對象,然後交換值? – rashik

+1

是的,你可以這樣做,或者你可以在答案中使用數組。它的工作原理是因爲數組是可變的。 –

回答

1

Java is always pass by value,and Integer is immutable and you can not update the callers reference。你可以使用一個數組(存儲在數組中的值是mutable)。因爲數組是Object,所以它的值是通過對數組實例的引用的值傳遞的,因此可以修改數組中的值。喜歡的東西,

static void swap(int[] arr, int i, int j) { 
    // error checking 
    if (arr == null || i == j) { 
     return; 
    } 
    if (i < 0 || j < 0 || i > arr.length - 1 || j > arr.length - 1) { 
     return; 
    } 
    // looks good, swap the values 
    int t = arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = t; 
} 

,然後你可以這樣調用它

public static void main(String[] args) { 
    int[] arr = { 10, 20 }; 
    System.out.println(Arrays.toString(arr)); 
    swap(arr, 0, 1); 
    System.out.println(Arrays.toString(arr)); 
} 

然後(輸出)的值交換

[10, 20] 
[20, 10] 
+0

好的謝謝...但「整數我=新整數(10)」創建一個對象,或者它就像一個原始數據類型? – rashik

+0

@rashik Integer是Java中不可變的封裝類型。另外,我相信有一個實例池用來保證'Integer(10)'== 10. –

+0

一個「有趣的」技巧,在不使用第三個變量的情況下交換2個整數:a = a + b; b = ab ; A = AB; –