2012-03-01 10 views
4

2つの値を交換するたびに、実際のスワップを実行するために一時的に使用する必要があります。 Javaは、2つの変数の値を単純に入れ替えるために、どんなクラスでもファシリティメソッドを提供しないのはなぜですか?Javaが単純なスワップ機能を提供しないのはなぜですか?

+4

なぜJavaはそれには何もないのですか? Javaクリエイターに相談してください。 – shift66

+0

http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-javaおよびhttp://stackoverflow.com/questions/2393906/how-do-i- make-my-swap-function-in-Java –

+0

@Ademibanはあなたの文法を修正します。 – Juvanis

答えて

12

JavaはPass-by-Valueです。そのため、簡単なスワップメソッド(ref)を作成することはできません。


ただし、別のオブジェクト内のあなたの参照をラップし、内部のREFを入れ替えることができます:それは可能ではないので

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; 
} 
関連する問題