Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Tipo reference

  1. #1

    Tipo reference

    Ho parecchia confusione sul tipo "reference" del libro Java5 di De Sio Cesari. Voglio capire se sto capendo (scusate il giochetto di parole) il concetto del codice seguente (c'è la classe Persona con una variabile Stringa "nome" che non scrivo qua).
    codice:
    Persona persona1 = new Persona();        
            persona1.nome = "Mario";
            Persona persona2 = persona1;
            persona2.nome="bò";
    Da quel che ho capito, con le righe 1 e 2 stiamo creando un oggetto della classe Persona assegnandogli il nome e fin qui tutto ok.
    Nelle altre righe, considerando che non c'è il "new" non stiamo creando un altro oggetto, ma un reference, cioè un qualcosa di astratto che punta allo stesso indirizzo ram di "persona1", è giusto?
    Ma a questo punto stiamo usando un passaggio per indirizzo come il C++ usando le classi piuttosto che i metodi che permettono solo il passaggio per valore?
    Il problema che mi sono posto è: mettiamo ad esempio io voglia apportare delle modifiche, perchè usare questa cosa e non creare semplicemente dei metodi di classe? Non colgo l'utilizzo reale che se ne può fare.
    Ultima modifica di gennysennin; 13-03-2016 a 14:49

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da gennysennin Visualizza il messaggio
    Nelle altre righe, considerando che non c'è il "new" non stiamo creando un altro oggetto, ma un reference, cioè un qualcosa di astratto che punta allo stesso indirizzo ram di "persona1", è giusto?

    Il problema che mi sono posto è: mettiamo ad esempio io voglia apportare delle modifiche, perchè usare questa cosa e non creare semplicemente dei metodi di classe? Non colgo l'utilizzo reale che se ne può fare.
    Per chi programma in Java, una variabile di tipo reference è un qualcosa di abbastanza "opaco", si sa solo che: o fa riferimento ad un oggetto oppure vale null. Non ci sono altre possibilità.
    Non sai quanto è grande un reference in memoria (dipende dalla implementazione della JVM/SO), non puoi stamparne il valore (del reference) e non puoi farci "aritmetica" (la aritmetica dei puntatori che invece esiste in C/C++).
    Ma alla fin fine un reference è un valore. Se fai:

    Persona persona2 = persona1;

    alla fine vuol dire che entrambe le variabili persona1 e persona2 avranno lo stesso valore. E quindi faranno riferimento allo stesso oggetto (se persona1 non null, chiaramente).
    Quindi che tu faccia persona1.nome o persona2.nome stai accedendo alla stessa cosa.

    E comunque, a parte ciò che si può fare in più con i puntatori di C/C++, la semantica è la stessa. In C/C++ se hai un puntatore ad una struttura dati ed assegni il puntatore ad un'altra variabile (dello stesso tipo), avrai 2 variabili che "puntano" alla stessa cosa, quindi potrai manipolare la struttura dati accedendoci con due variabili differenti. Il senso è esattamente lo stesso in Java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ma quindi se come pensavo i due oggetti (il reference non lo è ma passiamola sta cosa) diventano in pratica la stessa cosa, a che mi serve creare un reference visto che sull'originale posso fare tutto quello che voglio?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da gennysennin Visualizza il messaggio
    ma quindi se come pensavo i due oggetti (il reference non lo è ma passiamola sta cosa) diventano in pratica la stessa cosa
    Innanzitutto un reference non è un oggetto ... è un valore. Ed è quel valore che permette alla Java Virtual Machine di referenziare ed accedere ad un oggetto.
    Poi nel tuo esempio di prima non hai 2 oggetti Persona. Ne hai solo uno.

    Quote Originariamente inviata da gennysennin Visualizza il messaggio
    a che mi serve creare un reference visto che sull'originale posso fare tutto quello che voglio?
    Dipende ... in certi casi potrebbe essere utile. In una variabile potresti voler tenere il riferimento ad un oggetto Persona "originale" e in un'altra variabile inizialmente quello ma che poi può cambiare in base a della logica.
    Non stare adesso a chiederti "a che serve". Può servire. È perfettamente lecito. E poi tieni presente che quando passi un reference ad un metodo/costruttore, esso riceve una copia del valore del reference. Quindi si è di nuovo nel caso in cui il chiamante ha un certo reference e il metodo/costruttore invocato ha un parametro (che alla fin fine è una variabile locale) con lo stesso valore.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.