[java.lang] Object/String --> compareTo() ou equals()
bonjour,
je voudrais simplement savoir quelle methode faut t-il employe pour comparer deux objets String equals() ou compareTo()
je precise que j'ai besoin de comparer la valeur exact de mon objet et j'ai l'impression que equals ne compare que les adresses memoire des objets et non leur contenu.
La question prevaut egalement pour un objet de la classe Timestamp ?
Cas general
si j'ai un objet (javabean) construit avec plx String comme proprietes et que je souhaite pouvoir voir l'egalite, pour savoir si le contenu de mon objet est strictement identique a l'objet passe en parametre. puis je utiliser directement la methode equals ou compareTo de la classe object ou dois je redefinir une methode qui compare propriete par propriete
???
merci
WD[/b]
Re: [java.lang] Classe String --> compareTo() ou equals(
Salut,
Citation:
Envoyé par wdionysos
je voudrais simplement savoir quelle methode faut t-il employe pour comparer deux objets String equals() ou compareTo()
Les deux peuvent faire l'affaire... compareTo() te donnant en plus une information sur l'ordre des chaines...
Citation:
Envoyé par wdionysos
je precise que j'ai besoin de comparer la valeur exact de mon objet et j'ai l'impression que equals ne compare que les adresses memoire des objets et non leur contenu.
En fait cela dépend : la méthode equals() hérité de Object se contente de comparer les références des objets (donc a.equals(b) ssi a==b).
Pourquoi : simplement parce qu'un Object n'a pas de contenu particulier.
Il faut donc que les différentes classes redéfinissent leurs propre méthodes equals() pour y ajouter leur propre code métier...
Citation:
Envoyé par wdionysos
La question prevaut egalement pour un objet de la classe Timestamp ?
Il suffit de regarder dans l'API pour voir que Timestamp.equals() est bien redéfini...
Citation:
Envoyé par wdionysos
Cas general
si j'ai un objet (javabean) construit avec plx String comme proprietes et que je souhaite pouvoir voir l'egalite, pour savoir si le contenu de mon objet est strictement identique a l'objet passe en parametre. puis je utiliser directement la methode equals ou compareTo de la classe object ou dois je redefinir une methode qui compare propriete par propriete
Tu dois redéfinir la méthode equals(Object) en lui ajoutant le code métier qui permet de comparer tes objets, par exemple pour une classe contenant deux champs, cela pourrait ressembler à :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class MaClasse {
private String name;
private String value;
public boolean equals(Object otherObject) {
boolean result = false;
if (this==otherObject) {
// même référence donc egal !
result = true;
} else if (otherObject instanceof MaClasse) {
MaClasse other = (MaClasse) otherObject;
result = this.name.equals(other.name) &&
this.value.equals(other.value);
}
return result;
}
} |
De plus si tu dois utiliser ton objet en tant que clef d'une Map, il faut aussi redéfinir la méthode hashCode()...
a++