classi diverse hanno diversi criteri per ciò che rende 2 oggetti "uguali". Normalmente, equals() restituisce true se è lo stesso oggetto:
Object a = new Object();
Object b = new Object();
return(a.equals(b));
Ciò restituirà falso, nonostante sapessero che sono entrambe le classi "oggetto", non sono la stessa istanza. a.equals(a)
restituirà true.
Tuttavia, in casi come una stringa, è possibile avere 2 casi diversi, ma String uguaglianza è basata su caratteri letterali che compongono quelle stringhe:
String a = new String("example");
String b = new String("example");
String c = new String("another");
a.equals(b);
a.equals(c);
Queste sono tutte diverse istanze di String, ma la i primi equals restituiranno true perché sono entrambi "example", ma il 2 non lo farà perché "example" non è "another".
Non è necessario eseguire l'override di equals() per ogni classe, solo quando esiste un caso speciale per l'uguaglianza, come una classe che contiene 3 stringhe, ma solo la prima stringa viene utilizzata per determinare l'uguaglianza. Nell'esempio che hai pubblicato, potrebbe esserci stato un altro campo, description
, che potrebbe essere diverso per 2 diversi "Contatti", ma 2 "Contatti" saranno considerati uguali se quei 4 criteri corrispondono (nome/cognome e casa/cellulare numeri), mentre la descrizione corrispondente o non corrispondente non gioca se 2 Contatti sono uguali.
fonte
2011-12-01 08:29:02
Presumo che abbiate già consultato la documentazione, che lo spiega chiaramente: http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html [scorrere verso il basso per equals() come il collegamento diretto non sembra funzionare in commments]. – NPE