Maison >développement back-end >Tutoriel Python >Explication détaillée de la différence entre == et égal en Java

Explication détaillée de la différence entre == et égal en Java

不言
不言avant
2019-03-07 17:34:483665parcourir

Cet article vous apporte une explication détaillée de la différence entre == et égal en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

La différence entre == et égal en Java, j'ai l'impression que seules quelques personnes peuvent la dire tout à fait correctement.

Une mauvaise réponse courante est : == Les types de base comparent si les valeurs sont les mêmes, les types de référence comparent si les références sont les mêmes et les égaux comparent si les valeurs sont les mêmes.

Quant à la raison pour laquelle c'est faux, vous le saurez après avoir lu l'explication de cet article sur == et égal.

1. == Interprétation

Les effets de == sur les types de base et les types de référence sont différents, comme suit :

Types de base : Les la comparaison consiste à savoir si les valeurs sont les mêmes ; Type de référence : La comparaison consiste à savoir si les références sont les mêmes ;

Exemple de code :

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

Interprétation du code : Parce que x et y pointent ; à la même référence, So == est également vrai et la nouvelle méthode String() est réécrite pour ouvrir de l'espace mémoire, donc le résultat de == est faux et égal compare toujours les valeurs, donc les résultats sont tous vrais.

2. L'interprétation des égaux

equals est essentiellement ==, sauf que String et Integer remplacent la méthode égale et la transforment en une comparaison de valeurs. Regardez simplement le code ci-dessous pour comprendre.

Regardons d'abord comment égal compare les objets avec la même valeur par défaut. Le code est le suivant :

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

Le résultat de sortie est au-delà de nos attentes, il est faux ? Que se passe-t-il ? Vous le saurez après avoir regardé le code source d'equals. Le code source est le suivant :

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

Il s'avère que equals est essentiellement ==.

La question est : pourquoi deux objets String avec la même valeur renvoient-ils vrai ? Le code est le suivant :

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

De même, lorsque nous entrons dans la méthode égale de String, nous trouvons la réponse :

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

Il s'avère que. La chaîne remplace la méthode égale de l'objet. Changez la comparaison de référence en comparaison de valeurs.

3.Résumé

En général, == est une comparaison de valeurs pour les types de base, et pour les types de référence, c'est une référence et est égale aux valeurs par défaut ; , il s'agit d'une comparaison de référence, mais de nombreuses classes ont remplacé la méthode égale, telle que String, Integer, etc., la transformant en une comparaison de valeurs, donc dans des circonstances normales, égal compare si les valeurs sont égales.

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