Visualizzazione dei risultati da 1 a 10 su 20

Discussione: utilizzo dei reference

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Vediamo se ho capito anche il resto. Torniamo all'esempio che ho inserito nel post #5.

    Quindi con

    codice:
    ogg.cambiaReference(dataDiNascita)
    è come se dicessi "prendi la variabile dataDiNascita che contiene l'indirizzo di memoria dove si trova l'oggetto e che quindi contiene i campi giorno, mese e anno con già i valori all'interno inseriti nelle righe precedenti".
    Tra l'altro il senso del metodo cambiaReference è appunto quello di cambiare il valore (forse sarebbe corretto dire l'indirizzo di memoria) di ogg perchè fino a quel momento ogg è una variabile che contiene l'indirizzo di una locazione di memoria diversa da dataDiNascita visto che sono state fatte due istanziazioni differenti nelle prime due righe:
    codice:
    CiProvoConIReference ogg = new CiProvoConIReference();
    Data dataDiNascita = new Data();

    successivamente con il blocco di codice

    codice:
    public class CiProvoConIReference
    {
            public void cambiaReference(Data data)
            {
                      data = new Data();
            }
    }
    è come se dicessi "lascia perdere quella locazione di memoria, crea un nuovo oggetto in modo che la variabile ogg non contenga l'indirizzo di memoria dove si trova dataDiNascita ma l'indirizzo di memoria dove si trova un nuovo oggetto che è inizializzato con valori di default". Per questa ragione dataDiNascita contiene ancora i valori inseriti in precedenza.

    E' corretto?

  2. #2
    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

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.