Maison > Java > Javacommencer > le corps du texte

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

王林
Libérer: 2020-07-10 16:59:39
avant
3440 Les gens l'ont consulté

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);
}
Copier après la connexion

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;
        }
    }
}
Copier après la connexion

Fonctionnement. résultats :

false
Copier après la connexion

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;
        }
    }
}
Copier après la connexion

Résultat d'exécution :

true
Copier après la connexion

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));
}
Copier après la connexion

Résultat de sortie :

user1.equals(user2):true
user1==user2:false
Copier après la connexion

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!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal