1. Cause : jugement d'identité de chaîne
//String is reference type String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); // false System.out.println(str1.equals(str2)); // true
Partage de vidéos d'apprentissage en ligne : java apprentissage en ligne
2. Opérateur relationnel « == »
Clé points : "==" ne peut traiter que le jugement d'identité de la valeur correspondante du type de données de base, et n'est pas applicable au type de données de référence (dont la valeur est stockée dans l'adresse)
public class Main { public static void main(String[] args) { int n=3; int m=3; // true System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String("hello"); // false System.out.println(str1==str2); str1 = str; str2 = str; // true System.out.println(str1==str2); } }
n==m Le résultat est vrai, c'est facile à comprendre. Les valeurs stockées dans la variable n et la variable m sont toutes deux 3, qui doivent être égales. Et pourquoi les résultats des deux comparaisons de str1 et str2 sont-ils différents ? Pour comprendre cela, il vous suffit de comprendre la différence entre les variables de type de données de base et les variables de type de données non basiques.
8 types de données de base en Java
Type à virgule flottante : float, double ; Type entier : octet, court, int, long ; : booléen.
Pour les variables de ces 8 types de données de base, les variables stockent directement la "valeur", donc lorsque l'opérateur relationnel == est utilisé pour la comparaison, la "valeur" elle-même est comparée. Il convient de noter que les types à virgule flottante et entier sont tous deux des types signés, tandis que char est un type non signé
Pour les variables de types de données non basiques (types de référence), tels que String. type , une variable de type référence ne stocke pas la "valeur" elle-même, mais l'adresse en mémoire de l'objet qui lui est associé. Par exemple, str1 n'est pas la chaîne "hello" directement stockée, mais l'adresse correspondant à l'objet.
Ainsi, lorsque vous utilisez == pour comparer str1 et str2 pour la première fois, le résultat est faux. Parce qu’ils pointent respectivement vers des objets différents, c’est-à-dire que les adresses mémoire où ils sont réellement stockés sont différentes. Dans la deuxième comparaison, str1 et str2 pointent vers l'objet pointé par str en même temps, donc le résultat est sans aucun doute vrai (l'adresse est la même).
3. Méthode objet "equals()"
La méthode égale est une méthode de la classe de base Object, donc toutes les classes qui héritent de Object auront cette méthode. . Dans la classe Object, la méthode equals est utilisée pour comparer si les références de deux objets sont égales, c'est-à-dire si elles pointent vers le même objet. La classe
public class Main { public static void main(String[] args) { String str1 = new String("hello"); String str2 = new String("hello"); // true System.out.println(str1.equals(str2)); } }
String remplace la méthode equals pour comparer les points pointés. strings. Indique si les chaînes stockées dans les objets sont égales. Certaines autres classes, telles que Double, Date, Integer, etc., ont remplacé la méthode equals pour comparer si le contenu stocké dans les objets pointés est égal.
Résumé :
Pour == : S'il agit sur une variable d'un type de données de base, sa "valeur" stockée est directement comparée pour l'égalité si elle agit ; sur une variable de type référence, la comparaison est l'adresse de l'objet pointé par la variable de type référence
Pour la méthode equals : Si la méthode equals n'est pas surchargée, l'adresse de l'objet pointé par la variable de type référence est comparée ; telles que String, si des classes telles que Date réécrivent la méthode égale, le contenu des objets pointés est comparé (la méthode égale ne peut pas être appliquée aux variables des types de données de base).
Pour plus d'articles et de didacticiels connexes, veuillez consulter : Démarrer avec 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!