View Single Post
Old 09-06-2009, 13:09   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
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'.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 09-06-2009 alle 16:48.
banryu79 è offline   Rispondi citando il messaggio o parte di esso