PDA

View Full Version : [java] problemi confronto oggetti


Prince_81
02-02-2010, 14:56
Ciao a tutti, vi espongo il problema, mentre mi esercitavo con equals per confrontare il contenuto di due oggetti ho riscontrato il seguente problema:

creo due oggetti rossi e verdi inizializzandoli con lo stesso contenuto, ma il ciclo if(rossi.equals(verdi)) mi da false e non stampa sapreste dirmi perchè?

il seguente codice stampa solo quando arriva a if(c == rossi).

public class banca{

public static void main(String[] args){



cliente rossi =new cliente("paolo",1000);
cliente verdi = new cliente("paolo",1000);

cliente c=rossi;
if(rossi == verdi)
System.out.println("rossi == verdi");
if(rossi.equals(verdi))
System.out.println("rossi.equals(verdi)");
if(c == rossi)
System.out.println("c == rossi");
}}

Oceans11
02-02-2010, 15:26
Dovresti postare anche il codice della classe cliente.

Così ad occhio direi che non hai fatto l'override del metodo equals di Object nella classe cliente. In soldoni vuol dire che devi decidere tu (implementando equals in cliente) il modo in cui confrontare 2 oggetti di tipo cliente.

vegeta83ssj
02-02-2010, 18:57
Il problema sta nel fatto che gli oggetti non si confrontano con
==
ma con il metodo equals che deve essere opportunamente definito nella classe.

Quando tu scrivi:
if(rossi == verdi)
se la memoria non mi inganna, stai chiedendo un confronto tra gli indirizzi delle locazioni di memoria dell'oggetto "rossi" e dell'oggetto "verdi".

Ciauz

minerte
02-02-2010, 19:09
si con == confronti se hanno lo stesso indirizzo, anche se gli ogetti hanno lo stesso "valore" risiedono in area di memoria diversa, quindi è normale che di dia false, sarebbe stato true ad esempio se

cliente rossi =new cliente("paolo",1000);
cliente verdi = rossi;

quoto anche Oceans se non hai fatto l'ovveride del metodo equals sara quello ereditato dall' Object quindi qualcosa del genere
public boolean equals(Object obj) {
return (this == obj);
}

che ad "occhio" dovresti riscrivere con la tua regola per dire se due instanze sono uguali.
PS
per convenvzione il nome delle Classi con lniziano con lettere maiuscola.

Prince_81
02-02-2010, 22:02
infatti non ho fatto l'override del metodo equals non sapevo che bisognava farlo.