/ / Warum ist mein Array SC das gleiche mit SN? - Java, Arrays

Warum ist mein Array SC mit SN identisch? - Java, Arrays

public static int[] tranzitie(int[] stare, int x, int y) {
stare[x] = y;
return stare;
}

int[] SC = {3,1,1,1};
int[] SN = {3,1,1,1};

SN = tranzitie(SC, x, y);

// wenn ich das tue, möchte ich nur SN ändern // aber in meinem Fall SN = SC

Antworten:

1 für die Antwort № 1

Wenn Sie das ursprüngliche Array nicht ändern möchten, müssen Sie a defensive Kopie und arbeite stattdessen an dieser Kopie, zum Beispiel:

public static int[] tranzitie(int[] stare, int x, int y) {
int[] copy = stare.clone();
copy[x] = y;
return copy;
}

Sieh dir das an verwandte Diskussion Das erklärt im Detail, wie Methodenparameter in Java übergeben werden.


0 für die Antwort № 2

In Java sind Arrays Objekte, und wenn Sie eine zuweisen int[] Variable oder übergeben Sie eine als Parameter, die Sie tatsächlich zuweisen oder übergeben Referenz zu dem Array-Objekt.

Also, in diesem Aufruf:

SN = tranzitie(SC, x, y);

tranzitie bekommt ein Referenz zum SC Array, keine Kopie davon. Das stare Parameter bezieht sich auf das gleiche Array. Also, wenn die Methode sagt

stare[x] = y;

es ändert sich tatsächlich SC---kein Kopieren von SC, aber das eigentliche Array selbst.

Wenn die Methode sagt return stare, schon seit stare Ist eine Referenz auf das SC-Array-Objekt, gibt die Methode diese Referenz zurück. Dann weisen Sie zu SN dazu. Das Ergebnis wird das sein SN und SC sind jetzt Verweise auf das gleiche Array. Das Array, das Sie zuvor erstellt haben:

int[] SN = {3,1,1,1};

ist nicht mehr zugänglich (es sei denn, Sie haben die Referenz woanders gespeichert).

Wenn dies nicht das ist, was Sie wollen, müssen Sie Ihre Arrays sorgfältig behandeln; das CopyOf und CopyOfRange Methoden in Arrays sind hilfreich beim Erstellen von Kopien von Arrays oder Teilen von Arrays.