Array som parameter
Antag att vi har en klassPP
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