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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage