Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20

Discussione: utilizzo dei reference

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Vediamo se ho capito anche il resto. Torniamo all'esempio che ho inserito nel post #5.

    E' corretto?
    Quando passi un oggetto ad un metodo, stai passando una copia del valore del reference. Il metodo chiamato può cambiare lo "stato" dell'oggetto (tramite qualunque metodo setter setXYZ o con altro nome che va a modificare le variabili di istanza dell'oggetto) ma NON può cambiare il valore della variabile reference che ha il chiamante.

    Con il tuo esempio in #5 il metodo cambiaReference NON può (non è proprio tecnicamente possibile) cambiare il valore di dataDiNascita che è locale e usabile solo nel contesto del chiamante.

    Pertanto in un metodo andare ad assegnare subito qualcos'altro ad un parametro (in generale ma specialmente se "reference") senza usarlo prima .... praticamente non serve a nulla e non ha senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Ok, quindi diciamo che è un esempio fine a se stesso.

    Ho svolto un esercizio su questo argomento (in realtà l'avevo già postato ma l'ho rifatto).

    Questa è la traccia:
    Creare una classe Risultato che dichiari una sola variabile d'istanza di tipo float e di nome risultato. Aggiungere eventuali metodi e costruttori utili. Creare una classe CambiaRisultato con un metodo public di nome cambiaRisultato() che prende in input un oggetto di tipo risultato e ne modifica la variabile interna risultato sommandola con un altro valore. Creare una classe con un metodo main() di nome TestRisultato che stampi la variabile risultato di un oggetto di tipo Risultato, prima e dopo che questo oggetto sia passato in input al metodo cambiaRisultato() di un oggetto di tipo CambiaRisultato.
    e questa è la mia soluzione:
    codice:
    public class TestRisultato
    {
        public static void main(String args[])
        {
            Risultato oggetto1 = new Risultato();
            System.out.println(oggetto1.risultato);
            CambiaRisultato oggetto2 = new CambiaRisultato();
            oggetto2.cambiaRisultato(oggetto1);
            System.out.println(oggetto1.risultato);
        }
    }
    codice:
    public class Risultato
    {
        public float risultato;
    
        public float somma()
        {
            risultato = risultato + 1;
             return(risultato);
        }
        
    }
    codice:
    public class CambiaRisultato
    {
        public void cambiaRisultato(Risultato oggetto)
        {
            oggetto.somma();    
        }
    }
    Ho fatto questo esempio perchè il metodo cambiaRisultato() va a modificare (tramite il metodo somma()) la variabile risultato dell'oggetto1 poichè l'oggetto1 viene passato in input quindi sa esattamente dove puntare, mentre non viene assolutamente modificato l'indirizzo di memoria (o reference) poichè non c'è un'istruzione del tipo oggetto = new Risultato().
    Giusto?
    Ultima modifica di newutente; 06-11-2014 a 12:53

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    codice:
    public class CambiaRisultato
    {
        public void cambiaRisultato(Risultato oggetto)
        {
            oggetto.somma();    
        }
    }
    Questo infatti è più sensato, perché il metodo somma è effettivamente in grado di modificare lo stato dell'oggetto Risultato.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    mentre non viene assolutamente modificato l'indirizzo di memoria (o reference) poichè non c'è un'istruzione del tipo oggetto = new Risultato().
    Giusto?
    Sì e ribadisco che se anche ci fosse in cambiaRisultato un oggetto = new Risultato(); quello che farebbe è semplicemente cambiare il valore del parametro che è di fatto una variabile locale del metodo, totalmente slegata da qualunque altra variabile anche del chiamante.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    ok, capito.
    grazie per la spiegazione.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.