重複の可能性:
Java は参照渡しですか?
ここで少し混乱しています。Arrays.sort(a) はどのように a の値を変更しますか?
int[] a = {9,8,7,6,5,4,3,2,1};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
Javaは値渡しだと思っていました...
重複の可能性:
Java は参照渡しですか?
ここで少し混乱しています。Arrays.sort(a) はどのように a の値を変更しますか?
int[] a = {9,8,7,6,5,4,3,2,1};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
Javaは値渡しだと思っていました...
はい、Java は値渡しです。ただし、ここで値渡しされるのは、配列自体ではなく、配列への参照です。
Java のオブジェクトは、 reference の値によって渡されます。したがって、オブジェクトを渡すと、参照のコピーが取得されます (その参照を別のものに割り当てた場合、パラメーターのみが変更され、元のオブジェクトは引き続き存在し、メイン プログラムによって参照されます)。
このリンクは、 reference の値による受け渡しについて少し示しています。
public void badSwap(Integer var1, Integer var2)
{
Integer temp = var1;
var1 = var2;
var2 = temp;
}
これらはオブジェクトへの参照ですが、関数スコープ内の内部参照のみであるため、スワップされません。ただし、これを行う場合:
var1.doubleValue();
元のオブジェクトへの参照を使用します。
Arrays.sort
変数を変更するのではなく、変数が指す配列オブジェクトを変更します。
確かに、Java は常に値渡しを行い、オブジェクトの場合、値渡しによるオブジェクトの参照を行います。したがって、配列の参照は値渡しされます。
配列への参照は値によって渡されるため、sort
メソッドには参照として同じ配列を参照する独自の参照がありa
ます。これはsort
、参照する同じ配列の内容を変更できることを意味しa
ます。