public class TestArray {
public static void main(String[] args) {
int[] ar = {1,2,3,4,5,6,7,8,9};
shiftRight(ar);
for (int i = 0; i < ar.length; i++) {
System.out.print(ar[i]);
}
// prints: 912345678 -- good
System.out.println();
reverseArray(ar);
for (int i = 0; i < ar.length; i++) {
System.out.println(ar[i]);
}
// prints: 91234567 -- I don't understand
System.out.println();
}
public static void shiftRight(int[] ar) {
int temp = ar[ar.length - 1];
for (int i = ar.length - 1; i > 0; i--) {
ar[i] = ar[i - 1];
}
ar[0] = temp;
}
public static void reverseArray(int[] ar) {
int[] temp = new int[ar.length];
for (int i = 0, j = temp.length - 1; i < ar.length; i++, j--) {
temp[i] = ar[j];
}
ar = temp;
for (int i = 0; i < ar.length; i++) {
System.out.print(ar[i]);
}
// prints: 876543219
System.out.println();
}
}
配列をパラメーターに渡すと、配列への参照がパラメーターに渡されます。メソッド内で配列パラメーターが変更された場合、その変更はメソッドの外部に表示されます。
最初のメソッド はshiftRight
、私が期待していることを実行します。メソッドの外側で配列を変更します。
ただし、2 番目のメソッドは、メソッドの外部で配列を変更しません。ただし、メソッド内で for ループを実行すると、正しい値が出力されます。ar
の参照が を指していないのはなぜtemp
ですか? メソッドが停止したときに変数temp
が破棄されるためですか?それによって参照も削除されますか? その場合でも、なぜ Javaar
は の参照を指していた を取得し、それをtemp
の元の参照に再適用するのar
でしょうか?
ありがとうございました。