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.