你好,我有一个问题,我写在下面的代码。从我所理解的到目前为止,传递给方法的是charArray的内存引用,因此变量charArray和tabCar应该指向相同的内存位置。因此,在我的方法reverseArray所做的修改应该看到,但不知何故,2打印语句显示相同的数组…谁能给我解释一下为什么?
public static void reverseArray(char[] tabCar){
int lastPlace = tabCar.length - 1;
for(int i = 0 ; i < tabCar.length ; i++){
char tempChar = tabCar[i];
tabCar[i] = tabCar[lastPlace - i];
tabCar[lastPlace - i] = tempChar;
}
}
public static void main(String[] args) {
char[] charArray = {'a','b','c','d','e','f'};
System.out.println("Before reverseArray : " + Arrays.toString(charArray));
reverseArray(charArray);
System.out.println("After reverseArray : " + Arrays.toString(charArray));
}
因为您正在运行循环直到tabCar。当i的值大于tabcar . length/2时,它就会恢复这些变化即:
a b c d e f --->original
f b c d e a ---> i=0
f e c d b a ---> i=1
f e d c b a ---> i=2
f e c d b a ---> i=3 (reverting the changes)
f b c d e a ---> i=4
a b c d e f ---> i=5
所以你应该在它到达一半的时候停止循环(tabCar.length/2)
public static void reverseArray(char[] tabCar) {
int lastPlace = tabCar.length - 1;
for (int i = 0; i < tabCar.length / 2; i++) {
char tempChar = tabCar[i];
tabCar[i] = tabCar[lastPlace - i];
tabCar[lastPlace - i] = tempChar;
}
}