À propos de la comparaison des méthodes "==" et "equals ()"

1) Pour ==, comparer si les valeurs sont égales

  • S'il s'agit d'un type de données de base, on compare si la "valeur" stockée est de taille égale;

  • Si agissant sur une variable de type référence, l'adresse de l'objet pointé est comparée

2) Pour la méthode equals, notez que la méthode equals ne peut pas être appliquée aux variables des types de données de base. Equals hérite de la classe Object et compare s'il s'agit du même objet. La
méthode equals () non écrite:

 public boolean equals(Object obj) {
        return (this == obj);
    }

Si la méthode égal n'est pas réécrite, l'adresse de l'objet pointé par la variable du type de référence est comparée;

Si des classes telles que String et Date réécrivent la méthode equals, le contenu de l'objet pointé est comparé.
    
Voyons un petit programme:

package test;

public class student{
    String name;
    int age;
    boolean sex;

    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }
        if(obj instanceof student){
            student student=(student)obj;
            if(this.name.equals(student.name)&&this.age==student.age&&this.sex == student.sex){
                return true;
            }
        }
        return false;
    }
}
package test;

public class test {
    public static void main(String[] args) {
        student p1 = new student();
        p1.name="a";
        p1.age=10;
        p1.sex=false;

        student p2 = new student();
        p2.name="a";
        p2.age=10;
        p2.sex=false;
        System.out.println(p1.equals(p2));
    }
}

Résultat de sortie: vrai , nous comparons ici les trois valeurs d'attribut de student en réécrivant equals (), tant que les trois attributs sont identiques, nous pensons que les deux objets sont égaux, sinon réécrits, puis equals () juge la mémoire de l'objet La valeur de l'adresse ne correspond évidemment pas à nos exigences. Voyons le
schéma de mémoire simple:

Insérez la description de l'image ici
Tant qu'ils ne sont pas le même objet, les adresses qu'ils stockent en mémoire doivent être incohérentes, même si tous leurs attributs sont les mêmes, nous devons donc généralement réécrire equals () lors de la comparaison d'objets, sinon la comparaison est dénuée de sens.

Publié 39 articles originaux · louange gagné 1 · vues 4620

Je suppose que tu aimes

Origine blog.csdn.net/thetimelyrain/article/details/99697654
conseillé
Classement