Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    help! problema con ritorno in java (return oggetto)

    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 erchè 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

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Devi considerare che gli array in Java sono oggetti (derivano direttamente da Object).
    Quindi, una modifica fatta ai loro elementi è effettivamente equivalente a richiamare un metodo dell'oggetto. E' come se l'oggetto array avesse l'overload dell'operatore [] (parlando con termini del linguaggio C). O, se preferisci, è come se vi fosse un metodo setValore(), che renderebbe equivalenti le seguenti chiamate:
    codice:
    // Sia mioArray un array (di qualunque tipo):
    mioArray[0] = valore;
    mioArray.setValore(0, valore);
    Da questo si deduce che la restituzione di un array tramite un metodo è equivalente alla restituzione del riferimento all'oggetto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.