Cosa succede quando si fa p=q oppure p==q?
Come si copiano/confrontano gli oggetti?
Come vengono passati gli oggetti ai metodi?
int x; Point p;
Per ogni variabile esiste una casellina (spazio di memoria)
Non c'è nessuna differenza! (finora)
La espressione new Point() crea un oggetto e restituisce l'indirizzo di memoria dell'oggetto.
Effetto di new Point():
new Point() è un metodo;
il valore restituito è la posizione dell'oggetto
creato in memoria.
p=new Point();
Significa: l'indirizzo di memoria in cui si trova l'oggetto creato va in p
Quando faccio p=, l'indirizzo dell'oggetto va in p
Se p e q sono variabili Point, facendo q=p ottengo:
Non ho fatto nessuna copia.
Ho due variabili che indicano lo stesso oggetto.
q=new Point(); q.x=p.x; q.y=p.y;
q=(Point) p.clone();
Il risultato è lo stesso:
if(a==b) ... confronta i valori delle variabili a e b:
Nel secondo caso, i valori delle variabili sono gli indirizzi dei due oggetti.
a==b è vero solo se a e b contengono l'indirizzo dello stesso oggetto.
int x, y;
Point p, q;
x=10;
y=10;
p=new Point(10, 10);
q=new Point(10, 10);
if(p==q)
System.out.println("Sono uguali");
else
System.out.println("Non sono uguali");
if(x==y)
...
Dopo aver creato i due oggetti:
Ogni volta che faccio new, ho un nuovo oggetto, in una nuova posizione.
Sono due oggetti diversi, per cui le loro posizioni in memoria sono diverse!
Sono diversi.
Confronto fra p e q:
if((p.x==q.x)&&(p.y==q.y)) ...
if(p.equals(q)) ...
Sono metodi definiti per tutti gli oggetti.
Per le classi predefinite di Java (come Point) si possono usare tranquillamente.
Per le classi definite da noi: vanno ridefiniti (vedremo poi come farlo).