Oppure

Loading
13/11/08 10:14
robyp7
Ciao
Tutti sappiamo (e io pure sempre saputo) che in java il passaggio di parametri è sempre per valore, per gli oggetti è un reference degli stessi ma non è da confondere con il passaggio per riferimento in C :perchè se abbiamo un reference (chiamiamolo ref il parametro)abbiamo una copia dell'indirizzo dell'oggetto che abbiamo passato quindi per modificare un attributo dell'oggetto in questione non possiamo fare new Ref(nuovovalore) perchè non andiamo ad agire sull'indirizzo di memoria ma su una copia..ma possiamo modificarlo se attravverso ref invochiamo direttamente l'oggetto che modifica ad esempio l'attributo val : ref.setVal(nuovovalore)
Ho un dubbio invece sul valore di ritorno che mi è venuto quando mi sono trovato a leggere quel codice che opera su una classe Matrix che rappresenta operazioni su matrici e che tramite getArray restituisce la matrice interna alla classe sulla quale vengono fatte operazioni per matrice(restituirebbe A dove a è dichiara nella classe come "public double [][]A; ";):

public Matrix uminus() {
Matrix X = new Matrix(m, n);
double[][] C = X.getArray();

for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
C[i][j] = -A[i][j];
}
}

return X;
}

public double[][] getArray() {
return A;
}

1)in questo caso in C non ci sarebbe una copia per valore di A o meglio del reference di A? quindi C sarebbe locale a uminus?
2)C viene modificata ma non viene restituito C, ma la classe X!se è vero il punto 1) C è locale(copia di A) quindi se modificato vuol dire che A in X non conterrà mai lo stesso risultato di C.. Invece così sembra che A venga modificato???Allora non è una copia per valore il return A di getArray?

Grazie mille
Roby
aaa
15/11/08 18:01
VaLeRiO
Teoricamente è tutto come dici tu:

Quando si passano oggetti passa il riferimento e quando si passano i valori primitivi una copia del valore.

Non saprei dirti come funzioni esattamente quella matrice dentro l'oggetto.
aaa