this et toString/equals/hashCode
Utilisez this pour désigner l’objet courant, écrivez une méthode toString utile et implémentez correctement equals et hashCode.
this et toString/equals/hashCode est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 3 leçons au total.
Le mot-clé désignant l’objet courant
Le mot-clé désignant l’objet courant fait référence à l’objet actuel. Utilisez-le pour accéder aux fields ou appeler un autre constructeur. Il est particulièrement utile lorsque les noms des paramètres sont identiques à ceux des fields, car il rend votre intention claire.
toString() lisible
toString() renvoie un résumé compréhensible d’un objet. Remplacez-le pour afficher des fields importants comme l’identifiant et le nom. Les journaux et les affichages de débogage deviennent ainsi beaucoup plus faciles à comprendre.
equals ou ==
equals vérifie l’égalité logique, tandis que == vérifie si deux références désignent le même objet. La plupart des classes métier devraient redéfinir equals pour comparer le contenu plutôt que l’adresse mémoire.
hashCode est cohérent avec equals
hashCode doit être cohérent avec equals : si a.equals(b) vaut true, alors a.hashCode() doit être égal à b.hashCode(). Cette règle est nécessaire pour que HashSet et HashMap fonctionnent correctement.
Conseils et pièges
Choisissez des fields stables pour l’égalité, comme un identifiant ou une adresse électronique, et gardez toString court. Évitez d’utiliser des collections modifiables dans equals et hashCode. En cas de doute, générez les méthodes avec votre environnement de développement, puis relisez-les.
Code : this, equals et hashCode
La démonstration crée deux personnes avec le même contenu. equals renvoie true, les codes de hachage correspondent et un HashSet peut retrouver le second objet.
public class Main {
// Simple Person class to demo this, toString, equals, hashCode
static class Person {
private int id;
private String name;
// Constructor uses this to set fields
Person(int id, String name) {
this.id = id; // this.id refers to the field
this.name = name; // name comes from the parameter
}
// Human friendly string
@Override
public String toString() {
return "Person{id=" + id + ", name=" + name + "}";
}
// Logical equality: same id and same name
@Override
public boolean equals(Object o) {
if (this == o) return true; // same reference
if (o == null || getClass() != o.getClass()) return false;
Person other = (Person) o;
if (this.id != other.id) return false;
// Compare names safely (null aware)
if (this.name == null) return other.name == null;
return this.name.equals(other.name);
}
// Hash code consistent with equals
@Override
public int hashCode() {
int result = Integer.hashCode(id);
result = 31 * result + (name == null ? 0 : name.hashCode());
return result;
}
}
public static void main(String[] args) {
// Create two persons with the same content
Person a = new Person(1, "Ada");
Person b = new Person(1, "Ada");
// toString shows readable info
System.out.println(a);
// equals compares content, not memory address
System.out.println("a == b ? " + (a == b)); // false (different objects)
System.out.println("a.equals(b) ? " + a.equals(b)); // true (same content)
// hashCode must match for equal objects (useful in hash collections)
System.out.println("hash(a) = " + a.hashCode());
System.out.println("hash(b) = " + b.hashCode());
// Example with HashSet: contains works because equals and hashCode agree
java.util.Set<Person> set = new java.util.HashSet<>();
set.add(a);
System.out.println("set contains b ? " + set.contains(b)); // true
}
}
Vérification du contrat
Vérification rapide : si vous redéfinissez equals, que devez-vous faire d’autre et pourquoi ?
Récapitulatif
Récapitulatif : le mot-clé désignant l’objet courant clarifie l’accès aux fields, toString facilite le débogage, equals compare le contenu et hashCode garantit la cohérence des collections.
Questions Fréquemment Posées
La leçon « this et toString/equals/hashCode » est-elle gratuite ?
Oui — le texte complet de « this et toString/equals/hashCode » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « this et toString/equals/hashCode » ?
Utilisez this pour désigner l’objet courant, écrivez une méthode toString utile et implémentez correctement equals et hashCode. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 3.
Combien de temps prend la leçon « this et toString/equals/hashCode » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- this et toString/equals/hashCode
- Composition d’objets
- Modélisation d’un domaine (UML→code)