Maison  >  Questions et réponses  >  le corps du texte

Pourquoi en Java, lors de l'attribution des variables i3, i4 avec le même type de données, System.out.println(i3==i4), le résultat final n'est pas égal ?

System.out.println(i3==i4), pourquoi le résultat de sortie n'est pas vrai

class Demo
{
  public static void main(String[] arge)
{ 
  Integer i1=100;
  Integer i2=100;
  Integer i3=200;
  Integer i4=200;
  System.out.println(i1==i2);
  System.out.println(i3==i4);
}
}

黄舟黄舟2669 Il y a quelques jours1051

répondre à tous(2)je répondrai

  • 迷茫

    迷茫2017-06-28 09:26:50

    Tout d'abord, nous savons que le type d'objet compare l'adresse mémoire à laquelle il fait référence lorsqu'il fait ==. Ainsi, dans la démo de l'affiche originale, en principe, i1==i2 et i3==i4 comparent les adresses mémoire auxquelles ils font référence, qui devraient toutes deux être fausses. Cependant, Java a introduit le mécanisme de mise en cache Integer dans Java5. Lorsque les développeurs utilisent le type Integer, si la valeur définie est comprise entre -128 et 127, la référence sera pointée directement vers l'objet de cache créé.

    Dans la démo de l'affiche, les deux variables i1 et i2 sont comprises entre -128~127, donc les références des deux variables pointent vers la même instance d'objet (la même adresse mémoire), donc true est renvoyé, tandis que les deux variables i3 et i4 La valeur n'est pas comprise entre -128 et 127, donc le jvm crée de nouvelles instances d'objet (différentes adresses mémoire) pour ces deux types d'objet automatiquement encadrés, il renvoie donc false.

    La valeur maximale du mécanisme de cache Integer peut être ajustée via le paramètre jvm -XX:AutoBoxCacheMax=size. Pour plus de détails et les principes d'Integer, veuillez vous référer à ce blog. http://blog.csdn.net/u0110040...

    répondre
    0
  • 黄舟

    黄舟2017-06-28 09:26:50

    La classe plastic wrapper mettra en cache les objets entiers de 0 à 150, donc s'il est inférieur à 150, le cache sera utilisé lors de la boxe, 100 est un objet dans le cache et 200 est un objet nouvellement créé

    .

    répondre
    0
  • Annulerrépondre