Dans ce post, nous allons discuter de la différence entre l’opérateur == et la méthode equals() en Java.
Le ==
est un opérateur relationnel en Java qui est utilisé pour comparer des types primitifs tels que int, double, char, float, etc. Il ne doit pas être utilisé pour comparer deux références d’objets puisque pour toute valeur de référence non nulle x et y, x == y
renvoie vrai uniquement lorsque x et y font référence au même objet.
equals()
, d’autre part, est une méthode de la classe Object
qui est utilisée pour comparer des objets. Elle se comporte comme l’opérateur ==
si elle n’est pas surchargée par une classe. Chaque classe devrait surcharger la méthode equals()
de la classe Object
et spécifier la relation d’équivalence sur les objets. La relation d’équivalence doit être telle que les méthodes equals()
évaluent la comparaison des valeurs dans les objets, indépendamment du fait que les deux objets se réfèrent à la même instance ou non. Puisque des objets égaux doivent avoir des codes de hachage égaux, il est nécessaire de surcharger la méthode hashCode()
également.
Puisque String est un objet en Java, nous devrions toujours utiliser la méthode equals()
pour comparer deux chaînes de caractères en Java. Cela fonctionne puisque la classe String
surcharge la méthode equals()
de la classe Object
.
Comme il ressort du programme ci-dessus, la comparaison de deux chaînes de caractères en utilisant la méthode ==
et equals()
renvoie des résultats différents. Cela est dû au fait que ==
effectue une comparaison de référence, c’est-à-dire qu’elle compare si deux variables font référence au même objet ou non. Puisque nous créons deux nouveaux objets String
en utilisant le constructeur String
, ils ne partageront pas la même référence et s1 == s2
renvoie faux. Par conséquent, nous ne devrions jamais utiliser l’opérateur ==
pour comparer deux chaînes de caractères.
D’autre part, la méthode equals()
de la classe String
compare le contenu du tableau de chars soutenu et renvoie une valeur booléenne comme résultat de la comparaison.
Cependant le code ci-dessous donne des résultats différents. C’est parce que les littéraux String sont stockés dans le pool de constantes String, et les deux s1 & s2 partageront la même référence. Donc s1 == s2
renvoie vrai.
(6 votes, moyenne : 5,00 sur 5)
Merci de votre lecture.