Je l'ai compris parce que je n'ai pas fait attention en lisant ; String a réécrit la méthode hashCode, et sa hashCode valeur est déterminée par le contenu, pas par l'adresse
Utiliser == pour déterminer String en Java consiste à déterminer les adresses de deux objets au lieu de hashCode. Parce que vous avez deux objets String et que vous utilisez new pour les deux, utiliser == est faux.
hashCode et == sont différents. == compare les adresses mémoire et hashCode est calculé en fonction des variables d'instance.
Vous avez utilisé new pour créer deux instances de String (le mot-clé new ouvrira un nouvel espace mémoire), au lieu de référencer directement "hello" dans le pool de chaînes. Voici le code source de ce constructeur.
== Ce qui est comparé, c'est l'adresse mémoire. Le hachage et les égaux sont presque obtenus à partir de chaque caractère de la chaîne. Chaque caractère est le même et le hachage est le même, mais l'adresse mémoire est différente
== détermine si deux variables de référence pointent vers le même objet. Lorsque le contenu de deux objets est le même, leurs hashcodes sont les mêmes, mais leurs références ne sont pas égales
Je l'ai compris parce que je n'ai pas fait attention en lisant ;
String
a réécrit la méthodehashCode
, et sahashCode
valeur est déterminée par le contenu, pas par l'adresseUtiliser == pour déterminer String en Java consiste à déterminer les adresses de deux objets au lieu de hashCode. Parce que vous avez deux objets String et que vous utilisez new pour les deux, utiliser == est faux.
hashCode et == sont différents. == compare les adresses mémoire et hashCode est calculé en fonction des variables d'instance.
Vous avez utilisé new pour créer deux instances de String (le mot-clé new ouvrira un nouvel espace mémoire), au lieu de référencer directement "hello" dans le pool de chaînes. Voici le code source de ce constructeur.
La méthode de calcul de hachage de String est basée sur la valeur et le hachage dans le code ci-dessus.
== Ce qui est comparé, c'est l'adresse mémoire. Le hachage et les égaux sont presque obtenus à partir de chaque caractère de la chaîne. Chaque caractère est le même et le hachage est le même, mais l'adresse mémoire est différente
.== détermine si deux variables de référence pointent vers le même objet. Lorsque le contenu de deux objets est le même, leurs hashcodes sont les mêmes, mais leurs références ne sont pas égales