Array som parameter

Antag att vi har en klass PP som har en instansvariabel enligt följande:
private int[] x;
I klassen finns en metod void setX(int [] xx) som kopierar värdena i arrayen xx till instansvariabel x. Metoden kan se ut så här:
public void setX(int [] xx) { // Skapa arrayen x lika lång som xx this.x = new int[xx.length]; // Kopiera alla element från xx till x for (int i=0; i < this.x.length; i++) { this.x[i] = xx[i]; } }
Metoden kan anropas enligt följande:
// Skapa ett PP-objekt p1 PP p1 = new PP(); // Gör något med p1 ... // Deklarera en array z int [] z = {3,14,7,8,23}; // Byt värden i instansvariabeln x i p1, så att // x får samma värden z p1.setX(z);
Instansvariabeln x i PP-objektet p1 kommer därmed att bli {3,14,7,8,23}. Metoden setX enligt ovan utför s.k. djupkopiering, dvs värdena kopieras och INTE referensen.

En alternativ metod som utför s.k. grundkopiering är följande

public void setX_Alt2(int [] xx) { // Kopiera referensen till arrayen xx till arrayen x this.x = xx; }
Därmed refererar xx och x till samma array, vilket kan ställa till trassel, enligt följande:
// Skapa ett PP-objekt p1 PP p1 = new PP(); // Gör något med p1 ... // Deklarera en array z int [] z = {3,14,7,8,23}; p1.setX_Alt2(z); // z och instansvariabeln x refererar nu till samma array // Om vi ändrar något i z z[1]=99; // kommer även x att ändras

Tillbaka

Valid CSS!