Codice:
public class test{
public static void main(String args[]){
Object x=new Object();
Object y=new Object();
Sono state create due
reference, di tipo Object, di nome 'x' e 'y'.
'x' è stata fatta puntare a un nuovo Object, e 'y' è stata fatta puntare a un altro nuovo Object.
Notare quindi, che la parte a sinistra dell'assegnamento è la
reference e la parte a destra dell'assegnamento è una
istanza (un oggetto istanziato)
Codice:
//confronto se hanno lo stesso riferimento ---> NO
if(x==y) System.out.println("YES");
else System.out.println("NO");
Qui si usa l'operatore di uguaglianza '==' che confronta
istanze.
la reference 'x' punta a un'istanza di Object diversa da quella a cui punta la reference 'y'.
Codice:
System.out.println();
x=y;
Qui c'è un assegnamento. Ricordando che la parte a sinistra è la reference a cui si assegna una istanza, la parte a destra viene risolta come l'istanza da assegnare.
In questo caso stiamo assegnando alla reference 'x' l'istanza puntata dalla reference 'y'. La vecchia istanza di Object puntata da 'x' resta così senza riferimenti, e, siccome parliamo di Java, diventa eleggibile per essere garbage-collected.
Codice:
//confronto se hanno lo stesso riferimento ---> SI
if(x==y) System.out.println("YES");
else System.out.println("NO");
System.out.println();
Chiaramente ora sia 'x' che 'y' puntano alla stessa istanza, quindi si verifica l'uguaglianza.
Codice:
y="Yahoo";
x="AUGH";
La reference 'x' viene nuovamente fatta puntare a una nuova istanza. In questo caso si sta assegnado un letterale di tipo String.
Anche la a reference 'y' viene fatta puntare a una nuova istanza. Anche in questo caso si sta assegnado un letterale di tipo String, diverso dal precedente. Parliamo quindi della creazione di due istanze diverse di tipo String.
La vecchia istanza di Object puntata da 'x' e 'y' resta ora senza riferimenti diventando in teoria eleggibile per essere garbage-collected.
Codice:
System.out.println();
System.out.println(y);
System.out.println(x);
}
}
Qui vengono stampate le due istanze di tipo String create al passaggio precedente. Prima viene stampata l'istanza puntata da 'y', poi quella da 'x'.