Maison  >  Article  >  Java  >  Quelles sont les fonctions de la fonction equals() et de '==' ?

Quelles sont les fonctions de la fonction equals() et de '==' ?

王林
王林avant
2020-07-10 16:59:393439parcourir

Quelles sont les fonctions de la fonction equals() et de '==' ?

Tout d'abord, jetons un œil à leurs différences :

(Apprentissage recommandé : programme d'entrée Java)

  • La méthode

    equals() est utilisée pour comparer si le contenu de deux objets est égal. Puisque toutes les classes héritent de la classe java.lang.Object, elle est applicable à tous les objets, si cette méthode n'est pas remplacée. , la méthode toujours appelée est la méthode de la classe Object, mais la méthode equals dans Object renvoie le jugement de ==;

  • "==" compare la mémoire variable (pile). L'adresse mémoire (tas) de l'objet stocké est utilisée pour déterminer si les adresses de deux objets sont identiques, c'est-à-dire si elles font référence au même objet.
Fonction Equals()

La fonction Equals() est utilisée pour déterminer si deux objets sont égaux.

equals() est défini dans Object.java du JDK. Distinguez si deux objets sont égaux en jugeant si leurs adresses sont égales (c'est-à-dire s'il s'agit du même objet). Le code source est le suivant :

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

Puisque la méthode equals() est définie dans Object.java, cela signifie que toutes les classes Java implémentent la méthode equals() et que toutes les classes peuvent comparer deux objets via equals( ). Si les objets sont égaux.

Cependant, nous avons déjà dit que l'utilisation de la méthode par défaut "equals()" est équivalente à la méthode "==". Par conséquent, nous remplaçons généralement la méthode equals() : si les contenus des deux objets sont égaux, la méthode equals() renvoie true sinon, renvoie fasle ;

Ce qui suit est divisé en 2 catégories basées sur "si la classe couvre la méthode equals()".

    Si une classe ne couvre pas la méthode Equals(), lorsqu'elle compare deux objets via Equals(), elle compare en fait si les deux objets sont le même objet. À ce stade, cela équivaut à comparer les deux objets via "==".
  • Nous pouvons remplacer la méthode Equals() de la classe pour laisser Equals() comparer si deux objets sont égaux via d'autres méthodes. L'approche habituelle est la suivante : si les contenus des deux objets sont égaux, la méthode equals() renvoie true sinon, renvoie fasle ;
  • Ce qui suit est un exemple pour illustrer les deux situations ci-dessus :

1 Le cas où la méthode equals() n'est pas couverte

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
    }
}

Fonctionnement. résultats :

false

Analyse des résultats :

Nous utilisons user1.equals(user2) pour "comparer si user1 et user2 sont égaux". appelé, c'est-à-dire Appelé (user1==user2).

Il compare "si p1 et p2 sont le même objet". À partir des définitions de user1 et user2, nous pouvons voir que bien qu’ils aient le même contenu, ce sont deux objets différents, donc le résultat renvoyé est faux.

(Tutoriel vidéo recommandé :

Tutoriel vidéo Java

) 2. Remplacer la méthode Equals()

Modifier le test EqualsTest ci-dessus et remplacer Equals(). Méthode :

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
 
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
}

Résultat d'exécution :

true

Analyse des résultats : Nous avons réécrit la fonction equals() de l'utilisateur dans EqualsTest.java : lorsque le nom et l'âge de deux objets User sont égaux, renvoie true. Par conséquent, le résultat en cours d’exécution renvoie vrai. La fonction de

==

« == » : Sa fonction est de déterminer si les adresses de deux objets sont égales. Il s'agit de déterminer si l'objet de référence est le même objet dans le tas pointé. Nous savons que tous les nouveaux objets sont dans le tas. Les références aux objets sont stockées dans la pile, plus précisément dans le cadre de pile. Regardons le morceau de code suivant :

public static void main(String[] args) {
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.println("user1.equals(user2):" + user1.equals(user2));
        System.out.println("user1==user2:" + (user1==user2));
}

Résultat de sortie :

user1.equals(user2):true
user1==user2:false

pointe vers deux objets dans le tas Blocks. se trouvent dans des zones différentes, donc par rapport à "==", false est renvoyé.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer