
Originariamente inviata da
Sevenis
Scusami e come mai a me il metodo sonoUguali da risultato TRUE se i nomi sono uguali e FALSE se i nomi non sono uguali? Dovrebbe darmi sempre FALSE a questo punto, no?
No, il tuo metodo sonoUguali sta facendo il confronto tra le stringhe !! Il metodo che hai scritto non sa nulla del fatto che quelle stringhe sono campi di IndirizzoPersona !
E' come se tu stessi scrivendo :
codice:
sonoUguali("Mario", "Mario"); // stamperà a video che sono uguali
sonoUguali("Pluto", "Paperino"); // stamperà a video che sono diversi
Ma tu vorresti (o dovresti) poter confrontare direttamente i due contatti, non le stringhe relative ai loro nomi. Questo puoi farlo ridefinendo equals() come ti è stato consigliato.
Nota che potresti farlo anche con un metodo statico, ad esempio definendo un metodo come:
codice:
public static boolean sonoUguali (IndirizzoPersona primoContatto, IndirizzoPersona secondoContatto)
Se dentro il metodo tu prendessi con getNome() il nome del primo contatto e del secondo contatto, ed eventualmente tutte le altre caratteristiche che vuoi conincidano per poter dire che due contatti sono uguali, allora avresti un metodo quasi equivalente all'equals.
Ma NON si usa questo procedimento. Devi cercare di evitare il più possibile metodi statici di questo tipo, ti tiri solo addosso rogne e non utilizzi i concetti cardine della programmazione ad oggetti.
In più quel metodo è visibile solo nella classe dove è definito. Mentre oggetto1.equals(oggetto2), lo puoi eseguire ovunque.
Inoltre equals() è il metodo deputato a verificare l'uguaglianza logica di due oggetti. Questo vuol dire che anche altre classi lo utilizzeranno, e in molti contesti, quindi non dovrai neanche essere tu a richiamarlo spesso, verrà fatto in automatico.
Quindi ti risparmierai anche di dover scrivere del codice in più. Ma i benefici di seguire questa prassi sono davvero tanti.