2012-03-01 64 views
4

每次我想交換兩個值時,我必須使用臨時來做實際交換。 爲什麼Java不給我們在任何類中的設施方法來簡單地交換兩個變量的值?爲什麼Java不提供簡單的交換功能?

+4

那麼,這有什麼問題?爲什麼Java沒有這個東西?詢問Java創作者。 – shift66 2012-03-01 11:06:42

+0

請參閱http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-java和http://stackoverflow.com/questions/2393906/how-doi-i- make-my-swap-function-in-java – 2012-03-01 11:10:02

+0

@Ademiban更正你的語法。 – Juvanis 2012-03-01 11:10:26

回答

12

Java是Pass-by-Value。這就是爲什麼你不能創建一個簡單的交換方法(ref)


但是,您可以換另一個對象中的引用和swap的內部裁判:

public static void main(String[] args) { 
    Ref<Integer> a = new Ref<Integer>(1); 
    Ref<Integer> b = new Ref<Integer>(2); 

    swap(a, b); 

    System.out.println(a + " " + b); // prints "2 1" 
} 

public static <T> void swap(Ref<T> a, Ref<T> b) { 
    T tmp = a.value; 
    a.value = b.value; 
    b.value = tmp; 
} 

static class Ref<T> { 
    public T value; 

    public Ref(T t) { 
     this.value = t; 
    } 

    @Override 
    public String toString() { 
     return value.toString(); 
    } 
} 
3

的Java不提供這樣的方法,因爲它是不可能的。 變量按值傳遞給方法。是的,即使這些是物體。在這種情況下,我們通過值傳遞對象的引用。因此,您無法在接收此變量的方法內改變源變量的值作爲參數:

int a = 5; 
int b = 6; 
swap(a, b); 
// a is still 5, b is still 6! 


void swap(int first, int second) { 
    int tmp = first; 
    first = second; 
    second = tmp; 
}