Maison  >  Article  >  Java  >  Comment déterminer si deux objets sont égaux en Java

Comment déterminer si deux objets sont égaux en Java

尚
original
2019-11-22 11:00:316163parcourir

Comment déterminer si deux objets sont égaux en Java

La méthode equals() peut être utilisée en Java pour déterminer si deux objets sont égaux La méthode equals() est utilisée pour comparer une chaîne avec un spécifié. objet. Renvoie true si l'objet donné est égal à la chaîne ; sinon, false.

Le code source de cette méthode est le suivant :

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

Tous les objets ont une identification (adresse mémoire) et un statut (données), et "==" compare les adresses mémoire des deux objets , donc on dit que l'utilisation de la méthode equals() de Object consiste à comparer si les adresses mémoire de deux objets sont égales, c'est-à-dire que si object1.equals(object2) est vrai, cela signifie que equals1 et equals2 font réellement référence à l'objet. même objet.

Bien que parfois la méthode equals() d'Object puisse répondre à certaines de nos exigences de base, nous devons être conscients que la plupart du temps nous comparons deux objets. À l'heure actuelle, la méthode equals() d'Object Ce n'est pas le cas. possible. En fait, dans le JDK, les classes d'encapsulation telles que String et Math réécrivent toutes la méthode equals().

Ce qui suit est la méthode equals() de String :

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }

Pour ce segment de code : if (v1[i++] != v2[j++]) return false on peut voir très clairement ; La méthode equals() de String effectue une comparaison de contenu, pas une comparaison de référence. Quant aux autres classes d’encapsulation, elles sont similaires.

Dans la spécification Java, son utilisation de la méthode equals() doit suivre les règles suivantes :

La méthode equals implémente l'égalité sur les références d'objets non nulles :

1. Réflexivité : pour toute valeur de référence non nulle x, x.equals(x) doit renvoyer vrai.

2. Symétrie : pour toute valeur de référence non nulle x et y, x.equals(y) doit renvoyer vrai si et seulement si y.equals(x) renvoie vrai.

3. Transitivité : Pour toute valeur de référence non nulle x, y et z, si x.equals(y) renvoie vrai et y.equals(z) renvoie vrai, alors x.equals(z ) Devrait renvoyer vrai.

4. Cohérence : pour toutes les valeurs de référence non nulles x et y, appeler x.equals(y) plusieurs fois renvoie toujours vrai ou renvoie toujours faux, à condition que les informations utilisées dans la comparaison égale sur l'objet n'a pas été révisé.

5. Pour toute valeur de référence non nulle x, x.equals(null) doit renvoyer false.

Pour les règles ci-dessus, il est préférable que nous les respections lors de l'utilisation, sinon des erreurs inattendues se produiront.

Pour comparer en java, il faut choisir la méthode de comparaison appropriée en fonction du type de comparaison :

1) Dans le champ objet, utilisez la méthode égale.

2) Énumération de type sécurisé, utilisez égal ou ==.

3) Champs d'objet éventuellement nuls : utilisez == et égal.

4) Champ Array : utilisez Arrays.equals.

5) Types de données primitifs sauf float et double : utilisez ==.

6) Type Float : utilisez Float.foatToIntBits pour convertir en type int, puis utilisez ==.

7) Type double : utilisez Double.doubleToLongBit pour convertir en type long, puis utilisez ==.

Pour plus de connaissances sur Java, veuillez prêter attention au tutoriel de base Java.

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:
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