À quoi compare exactement l'opérateur relationnel « == » ?
La phrase suivante est un extrait du livre "Java Programming Thoughts" : "Les opérateurs relationnels génèrent un résultat booléen, et ils calculent la relation entre les valeurs des opérandes.".
Cette phrase semble simple, mais elle doit encore être bien comprise. Pour faire simple, == est utilisé pour comparer si les valeurs sont égales.
Regardons quelques exemples :
public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int n=3; int m=3; System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); str1 = str; str2 = str; System.out.println(str1==str2); } }
Le résultat de sortie est :
true false true
n==mLe résultat est vrai , c'est facile à comprendre. Les valeurs stockées dans la variable n et la variable m sont toutes deux égales à 3. 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.
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 des types signés, tandis que char est un type non signé (la plage de valeurs du type char est 0~2^16-1).
C'est-à-dire pour dire Par exemple :
int n=3; int m=3;
La variable n et la variable m stockent directement la valeur "3", donc par rapport à ==, le résultat est vrai.
Pour les variables de types de données non basiques, elles sont appelées variables de type référence dans certains livres. Par exemple, str1 ci-dessus est une variable de type référence. Une variable de type référence ne stocke pas la "valeur" elle-même, mais l'adresse de son objet associé en mémoire.
Par exemple, la ligne de code suivante :
String str1;
Cette phrase déclare une variable de type référence, qui n'est associée à aucun objet pour le moment.
Utilisez new String("hello") pour générer un objet (également appelé instance de la classe String) et liez cet objet à str1 :
str1= new String("hello");
Puis str1 pointe vers un objet (str1 est également appelé référence à un objet à de nombreux endroits). À ce stade, la variable str1 stocke l'adresse de stockage de l'objet vers lequel elle pointe en mémoire, et non la "valeur" elle-même, c'est-à-dire qu'elle le dit. que la chaîne "hello" n'est pas stockée directement. Les références ici sont très similaires aux pointeurs en C/C++.
Ainsi, lorsque vous utilisez == pour comparer str1 et str2 pour la première fois, le résultat est faux. Par conséquent, ils pointent respectivement vers des objets différents, ce qui signifie que les adresses mémoire où ils sont réellement stockés sont différentes.
Dans la deuxième comparaison, str1 et str2 pointent tous deux vers l'objet pointé par str, donc le résultat est sans aucun doute vrai.
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!