Erläutern Sie dieses Verhalten beim Übergeben von Java-Array-Referenzparametern
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();
}
}
Wenn Sie ein Array an einen Parameter übergeben, wird der Verweis auf das Array an den Parameter übergeben. Wenn ein Array-Parameter innerhalb der Methode geändert wird, wird diese Änderung außerhalb der Methode sichtbar.
Die erste Methode,shiftRight
, tut was ich erwarte: es ändert das Array außerhalb der Methode.
Die zweite Methode ändert jedoch nicht das Array außerhalb der Methode. Wenn Sie jedoch die for-Schleife innerhalb der Methode ausführen, werden die korrekten Werte ausgegeben. Warum ist nicht die Referenz vonar
wies auftemp
? Liegt es an der Variablentemp
wird zerstört, wenn die Methode stoppt - tötet das auch die Referenz? Auch wenn dies der Fall ist, warum nimmt Javaar
, auf die verwiesen wurde vontemp
und wenden Sie dann erneut die ursprüngliche Referenz von anar
?
Vielen Dank.