Première approche
Comme l'a dit Guillaume Lours, pour simplifier, == vaut VRAI si les 2 objets sont les mêmes, et equals() vaut VRAI si les 2 objets ont un contenu équivalent.Illustration
Si je crée une classe User, ainsi que 2 instances de cette classe, le == entre ces 2 objets seraFAUX:
Pour que equals() soit VRAI si les contenus sont les mêmes, je dois implémenter moi-même cette méthode, en y comparant tous les attributs de mon objet. En effet, par défaut, dans Object (la super classe de tous les objets Java), la méthode equals() fait un ==
Exemple :
Cas des objets primitifs : String
En Java, la gestion des objets primitifs (String, Boolean, Integer, Double, ...) est particulière. Ainsi, pour les objets String, Java a une procédure spéciale pour l'instanciation par "", et les instances créées par 2 chaines de caractères identiques (ex : "toto") sont des instances identiques, donc == vaut VRAI. Java gère une sorte de pool d'objets selon leurs contenus.Par contre, lors d'une instanciation explicite new String("toto"), l'objet créé est nouveau, spécifique, donc == vaudra FAUX.
Merci Xavier. Tu nous fais un petit article sur les subtilités du equals et du compareTo qui renvoie zéro ? ;-)
RépondreSupprimerAh oui, de beau souvenirs .... :-(
RépondreSupprimerPour ceux à qui ça pourrait servir, dans les très grandes lignes : dans le cas où votre classe implémente Comparable, si compareTo() renvoie 0, il faut que equals() renvoie TRUE. La JavaDoc dit que ça n'est pas obligatoire, que la classe peut avoir un ordre implicite sans effet sur equals(). Dans la pratique, je sous suggère de suivre la consigne pour éviter les problèmes dans les Map et autre Set ...
je veux votre aide SVP : voila je suis debutant et je sais pas comment faire cet exercice. voila l'ennoncé :
RépondreSupprimerpublic class Etudiant{
String nom; String prenoms; double moyenneGen;
String mention;
Etuduiant(String n, String pr, double moyenneGen){
nom=n; prenoms=pr; moyenneGen=moyG; mention=mt;
}
String nomEtudiant(){ return(nom);}
}
-Ajoutez un accesseur pour la variable moyenneGen et la variable mention.
-Ajoutez une méthode main() permettant de créer deux étudiants et faire afficher leurs coordonnées.
merci
Salut,
SupprimerLaisse moi tes coordonnées en cliquant sur "Contactez-moi" sur la droite du blog.
Xavier
Merci monsieur, ça m'a bien aidée.
RépondreSupprimerje veux comparer 2 objets avec < et/ou > est-il possible ???
RépondreSupprimersi non que dois-je jaire !!!
Bonjour,
SupprimerPourquoi voulez-vous comparer vos objets avec < ou > ? Que contiennent vos objets ? Auriez-vous un exemple ?
RépondreSupprimersi vous pouvez maidez a resoudre cette exercice svp
Soit le programme source suivant représentant la classe Etudiant. Dans cette classe, on définit les attributs nom, prenoms, MoyG et mention.
public class Etudiant { String nom; String prenoms; double MoyG; String mention;}
a) Ajouter un constructeur de la classe Etudiant.
b) Ajouter à la classe Etudiant la méthode affiche, de type de retour void, qui affiche à l’écran le nom et prenoms d’un objet Etudiant.
c) Ajoutez un accesseur pour chacun des attributs de la classe Etudiant.
d) Ajoutez une méthode main ( ) pour créer 3 objets Etudiant et utiliser la méthode affiche.