Originariamente inviato da robydrupo
No, non è proprio esatto. In un metodo che ha come parametro un oggetto tu hai una copia della variabile orginale che si riferisce all'oggetto, e mai l'oggetto stesso.
esempio:
codice:
public static void main(String[] args){
String[] array1 = {"1","2","3","4","5"};
String[] array2 = {"5","4","3","2",1"};
scambia1(array1, array2);
stampaVett(array1);
scambia2(array1, array2);
stampaVett(array1);
}
static void scambia1(String[] v1, String[] v2){
String[] appoggio = v1;
v1 = v2;
v2 = appoggio;
}
static void scambia2(String[] v1, String[] v2){
for(int x = 0; x < v1.lenght; x++){
int appoggio = v1[x];
v1[x] = v2[x];
v2[x] = appoggio;
}
}
Col primo in realtà scambi solamente le variabili di metodo (che stanno nello stack). Così facendo, le copie delle variabili all'interno si riferiscono ai vettori invertiti, senza però influire sulle variabili del main. Nel tuo metodo main non avrai il risultato ottenuto, ma array1 e array2 punteranno sempre all'array di partenza(heap).
Nel secondo invece vai ad operare direttamente sui valori dell'array, per cui vai a modificare i valori memorizzati nello heap, utilizzando le variabili locali che si riferiscono ai due array. Col secondo otterrai un vero scambio.
scusate la poca chiarezza, ma putroppo non so spiegarmi molto bene!