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();
}
}
將數組傳遞給參數會導致將參數傳遞給參數;如果在方法中更改數組參數,則該更改將在方法外可見。請解釋此Java陣列參考參數傳遞行爲
第一種方法,shiftRight
,做我所期望的:它改變方法外的數組。
但是,第二種方法不會改變方法外部的數組。但是在方法內部運行for循環會打印出正確的值。爲什麼ar
的引用不是指temp
?是否因爲變量temp
在方法停止時被銷燬 - 是否也會殺死引用?即使是這樣的情況,爲什麼Java會採用ar
,它指向temp
的引用,然後將其重新應用到原始引用ar
?
謝謝。
因此,雖然傳遞給參數的值是對數組的引用,但參數本身是其唯一變量(最初指向相同的引用),當指向本地數組時不會將外部變量指向該引用? –
是的。在Java中傳遞的所有參數都是如此。 –
是的,'ar = temp'將你本地的'ar'引用賦給'temp'引用的數組。 – rgettman