|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
[java] problemi confronto oggetti
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). Codice:
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");
}}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
|
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.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes] "Pirating software? Choose Microsoft!" |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Modena
Messaggi: 592
|
Il problema sta nel fatto che gli oggetti non si confrontano con
Codice:
== Quando tu scrivi: Codice:
if(rossi == verdi) Ciauz |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2008
Messaggi: 142
|
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. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 412
|
infatti non ho fatto l'override del metodo equals non sapevo che bisognava farlo.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:04.



















