Analysez et utilisez d'abord == (Remarque : = en Java est l'opérateur d'affectation, == est la comparaison de l'égalité) et la méthode equals() pour comparer deux La différence entre l'égalité des chaînes :
== compare si les adresses des deux chaînes sont égales (la même adresse), et la méthode equals() compare si le contenu des deux objets chaîne est le même (bien sûr, si deux chaînes font référence à la même adresse, la comparaison utilisant equals() renverra également true).
Vidéos d'apprentissage connexes recommandées : vidéo Java
Deux exemples seront donnés ci-dessous pour analyser le problème de comparaison de chaînes dans les deux situations :
Exemple 1. Utilisez le nouveau mot-clé pour déclarer deux variables de type String
Exécutez le programme et constatez que la comparaison avec égal renvoie vrai et la comparaison avec == renvoie vrai faux. La raison est la suivante :
Parce que == compare si les adresses de deux objets chaîne sont les mêmes (si ce sont les mêmes adresses). Lors de l'utilisation du mot-clé new pour créer un objet, l'objet occupe une place distincte. espace de stockage. , stocke la valeur de la chaîne llg. Par conséquent, même si les deux chaînes s1 et s2 ont la même valeur, l’adresse stockée n’est pas la même.
Lorsque vous utilisez == pour comparer, la comparaison consiste à savoir si les adresses des deux chaînes sont les mêmes, donc false est renvoyé. Mais utiliser la méthode equals() pour comparer ces deux chaînes comparera si les valeurs des deux chaînes sont les mêmes, donc elle renvoie vrai.
Exemple 2. Déclaration et définition de chaîne dans des circonstances normales
Après avoir exécuté le programme, il a été constaté que les deux méthodes renvoyaient vrai . Alors pourquoi est-ce ? Les raisons sont les suivantes :
Généralement, nous pensons que les variables de type de base et les variables de référence d'objet sont stockées dans la pile, tandis que les objets et les tableaux générés par new sont stockés dans le tas. Cependant, en plus de cela, il existe une zone appelée pool constant. Comme nous pensons habituellement à String s1 = "abc"; La valeur d'un objet chaîne déclaré ainsi est stockée dans le pool de constantes.
Lorsque nous créons un objet comme String s1 = "abc"
, "abc" est stocké dans le pool de constantes. Lorsque nous créons une référence String s2 = "abc"
, la couche inférieure de Java recherchera d'abord si "abc" existe dans le. pool constant ", s'il existe, laissez s2 pointer vers cette valeur et ne la recréera pas. Ainsi, lors d'une comparaison en utilisant ==, comme les adresses sont les mêmes, le résultat de la comparaison est vrai.
Ensuite, la question revient. Puisqu'il existe un pool constant, les chaînes sont-elles si elles ne sont pas nouvelles (généralement pas si nouvelles, et déclarer des variables de chaîne est généralement écrit comme l'exemple 2), alors ces chaînes sont toutes faire référence au même objet du pool constant, alors utilisez simplement == pour comparaison ? La réponse est oui.
Articles et tutoriels connexes recommandés : Commencer à apprendre 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!