【发布时间】:2013-07-10 09:22:33
【问题描述】:
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 完成了我的预期:它改变了方法之外的数组。
但是,第二种方法不会更改方法之外的数组。但是在方法内部运行 for 循环会打印正确的值。为什么ar 的引用不指向temp?是因为当方法停止时变量temp 被破坏了——这是否也会杀死引用?即便是这样,为什么Java要取ar,它被指向temp的引用,然后重新应用到ar的原始引用?
谢谢。
【问题讨论】:
标签: java arrays parameter-passing pass-by-value