Comparaison entre string.equals() et == en Java
En Java, il existe deux types de comparaison d’objets. Le premier est l’opérateur ==
qui fonctionne avec les adresses. Il compare en interne les références des objets. En revanche, la méthode equals
compare le contenu réel des instances.
Vous trouverez ci-dessous le bloc de code pour illustrer les opérateurs et leur comportement.
public class Main {
public static void main(String[] args) {
String str1 = "name";
String str2 = "name";
String str3 = new String("name");
System.out.println(str1.equals(str2));
System.out.println(str1 == str2);
System.out.println(str1.equals(str3));
System.out.println(str3 == str1);
}
}
Dans le bloc de code ci-dessus, trois instances de chaîne sont définies. Les classes de chaînes sont de nature immuable. L’immuabilité signifie que l’instance qui est créée ne peut jamais être remplacée.
De plus, les variables détiennent la mémoire dans l’emplacement du tas. Ainsi, lors de la création de la chaîne name
, elle est enregistrée dans la mémoire du tas. Lorsqu’une autre nouvelle instance, str2
avec la même valeur name
, est initialisée, la JVM ne crée pas une autre nouvelle adresse pour elle. Au lieu de cela, il affecte la référence de l’instance str1
à la variable str2
.
Le fait détient la preuve lorsque nous essayons de comparer str1==str2
aux deux instances de chaîne. L’instruction résulte true
car les deux références pointent vers la même adresse de nom dans la mémoire. Le fait expliqué peut être mieux compris dans le schéma ci-dessous.
De même, lorsque la méthode equals
est appliquée aux deux instances, elle donne la valeur booléenne true
. Comme la fonction fonctionne sur la comparaison de contenu, c’est égal.
Ensuite, une autre variable de chaîne str3
est initialisée à l’aide du mot-clé new
. La JVM créera en interne un nouvel espace dans la mémoire de tas pour l’adresse name
au lieu d’affecter l’instance à la variable str3
. Ainsi, lorsque la comparaison de contenu est effectuée, elle renvoie true
sur la fonction equals
. Il renvoie false
lorsque l’adresse est comparée à l’aide de l’opérateur ==
.
Voici la sortie du bloc de code ci-dessus.
true
true
true
false
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn