java 中两个 String 具有相同的 hashCode 使用 == 判断返回 false ?
高洛峰
高洛峰 2017-04-18 10:06:30
0
5
503
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(5)
刘奇

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.

巴扎黑
  1. hashCode et == sont différents. == compare les adresses mémoire et hashCode est calculé en fonction des variables d'instance.

  2. 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.

    public String(String original) {
       this.value = original.value;
       this.hash = original.hash;
    }

    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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!