重複の可能性:
Javaは「参照渡し」ですか?
以下に記述されている2つのJavaプログラムの違いを理解しようとしています。
public class Swapping {
public static void main(String[] args) {
IntWrap i = new IntWrap(10);
IntWrap j = new IntWrap(20);
swap(i, j);
System.out.println("i " + i.i + ", j " + j.i);
}
public static void swap(IntWrap i , IntWrap j){
int x = i.i;
i.i = j.i;
j.i = x;
System.out.println("i " + i.i + ", j " + j.i);
}
}
public class IntWrap {
int i;
public IntWrap(int i){
this.i = i;
}
}
出力:
i 20, j 10
i 20, j 10
そして2つ目:
public class Swapping {
public static void main(String[] args) {
Integer i = new Integer(10);
Integer j = new Integer(20);
swap(i, j);
System.out.println("i " + i + ", j " + j);
}
public static void swap(Integer i , Integer j){
Integer temp = new Integer(i);
i = j;
j = temp;
System.out.println("i " + i + ", j " + j);
}
}
出力:
i 20, j 10
i 10, j 20
Integerオブジェクトを渡しても、元のプログラムでスワップされるはずだということを理解できません。再びオブジェクトのみを渡すので、その上にラッパークラスを記述した場合、どのような違いが生じましたか。