Maison >développement back-end >Tutoriel Python >Explication détaillée de la différence entre == et égal en Java
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!