La méthode equals(Object) en Java est une méthode utilisée pour comparer l'égalité de deux objets. Dans les classes Java, la méthode equals est héritée par défaut de la classe Object et compare simplement les valeurs de référence de deux objets. Cependant, nous devons souvent comparer les objets pour vérifier leur égalité de manière personnalisée, ce qui nécessite de remplacer la méthode equals dans une sous-classe.
Afin de comparer correctement les objets pour l'égalité, nous devons suivre plusieurs règles. Premièrement, la méthode égale doit satisfaire la réflexivité, ce qui signifie qu’un objet doit être égal à lui-même. Deuxièmement, la méthode égale doit satisfaire la symétrie, c'est-à-dire que si l'objet A est égal à l'objet B, alors l'objet B et l'objet A doivent également être égaux. Enfin, la méthode égale doit satisfaire la transitivité, c'est-à-dire que si l'objet A est égal à l'objet B et que l'objet B est égal à l'objet C, alors l'objet A et l'objet C doivent également être égaux.
Afin de remplacer et de remplacer la méthode égale, nous devons prendre en compte les points clés suivants.
Tout d'abord, nous devons nous assurer que la signature de la méthode égale est cohérente avec la méthode égale dans la classe Object. La signature de la méthode equals doit être : public boolean equals(Object obj). Cela signifie que nous devons accepter un paramètre de type Object et renvoyer une valeur booléenne.
Deuxièmement, nous devons effectuer une vérification de type pour nous assurer que le paramètre transmis est un objet qui correspond au type d'objet actuel. Ceci peut être réalisé en utilisant le mot-clé instanceof. Si la vérification de type échoue, nous pouvons directement renvoyer false.
Ensuite, nous devons convertir les paramètres entrants en type de l'objet actuel et comparer l'égalité des différentes propriétés. Dans ce processus, nous devons suivre la convention d'implémentation de la méthode égale de Java, c'est-à-dire utiliser la méthode égale pour comparer les propriétés des objets au lieu d'utiliser l'opérateur "==".
Lors de la comparaison des valeurs d'attribut, nous devons considérer le cas de références nulles. Si la valeur de la propriété est nulle, nous pouvons utiliser la méthode égale de la classe Objects pour la comparaison, qui gérera correctement la situation de référence nulle. De plus, pour les attributs de type de base, nous pouvons directement utiliser l'opérateur "==" pour la comparaison.
Enfin, nous devons nous assurer que la méthode equals remplace la méthode hashCode. Selon la spécification Java, si deux objets sont égaux, leurs méthodes hashCode doivent renvoyer la même valeur. Cela permet de garantir que les objets sont stockés et récupérés correctement lors de l'utilisation de structures de données telles que les tables de hachage.
Voici un exemple montrant comment remplacer la méthode equals :
public class Person { private String name; private int age; // 省略构造方法、getter和setter方法 @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Person)) { return false; } Person other = (Person) obj; return Objects.equals(this.name, other.name) && this.age == other.age; } @Override public int hashCode() { return Objects.hash(name, age); } // 省略其他方法 }
Dans l'exemple ci-dessus, nous avons remplacé la méthode equals pour comparer les propriétés name et age de l'objet Person pour l'égalité. Dans le même temps, nous avons également remplacé la méthode hashCode pour garantir que les objets égaux ont le même code de hachage.
Pour résumer, en réécrivant et en remplaçant correctement la méthode égale, nous pouvons nous assurer que nous obtenons les résultats corrects lors de la comparaison d'objets pour l'égalité. Il convient de noter que la réécriture de la méthode equals doit satisfaire des propriétés telles que la réflexivité, la symétrie et la transitivité, et que la méthode hashCode doit également être réécrite. En suivant ces règles, nous pouvons nous assurer que nous obtenons les bons résultats lors de l'utilisation de comparaisons d'égalité d'objets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!