2016-12-15 3 views
0

私は、次のコードを持っている:私は仕事にスワップ機能を必要とするJavaでは、どのようにして整数変数を参照として渡すことができますか?

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-byvalue?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

これはなぜ機能しますか? varsはまた、2つの値を保持する実際の配列へのコピーです。 –

+1

いいえ、varsは実際の配列への参照のコピーです。参照( 'vars = null')は変更できませんが、参照されるオブジェクトの状態を変更することができます(' vars [0] = null')。 'Integer'は不変でJavaは値渡しであるので、' Integer'だけではできません。しかし、変更可能な 'AtomicInteger'は' set() 'メソッドでこの"スワップ "を行うこともできます。著しい重複した質問には、これに関する多くの説明があります。 – Kayaman

関連する問題