Quelqu'un peut-il me dire la raison de la modification de la sortie.
567 567 true 567 568 false 567 567 False
8 Réponses :
Parce que X et Y se réfèrent à 2 objets différents.
y--;
Utilisez p> ou p> Notez que l'auto-boîte automatique ne se produit pas dans y == x code> vérifie pour l'égalité de contenu, c'est-à-dire qu'ils ont pointé sur le même objet, non pas si l'objet qu'ils ont pointé pour contiennent le même int code>. Surtout lorsque x, y> = 128 code>. x code> et y code> comme int code> à la place. p> INTEGER == INTEGER CODE> ou INTEGER! = INTEGER CODE>. P> P>
Changez votre
int y = 567;
int x = y;
Lorsque vous utilisez la primitive Cependant, lorsque vous utilisez la classe int code> au lieu du entier code>. La sortie finale serait true code>. P>
entier code>, ils sont objet code> s. Si vous utilisez la méthode code> égale code> La sortie finale serait true code>. P>
lorsque vous utilisez Enger au lieu de la primitive Int. La sortie finale serait vraie. Code>. Quoi?
Vous utilisez Fondamentalement, votre code est p> integer code> qui est un objet immuable. y = new Integer(y.intValue() - 1);
Le compilateur utilisera integer.valueof () code> au lieu du constructeur.
@BuhaKeIndi J'ai utilisé le constructeur pour en faire plus clairement, de ne pas montrer ce que fait la JVM.
Ceci est parce que le compilateur le fait en interne: signifie: p> donc, Utilisez y code> y code> est un nouvel INTEGER code> instance. Vous faites une vérification de référence d'objet (lors de l'utilisation de == code>) et non de la vérification de l'égalité de valeur. P> Equals () code> méthode pour évaluer 2 valeurs. < / p> p>
Même, si vous créez
Integer a = new Integer(1); Integer b = new Integer(1);
Dans Java Nouveau code> Opérateur Toujours B> Allocatez la mémoire pour un nouvel objet. C'est contraire à la valeur entière statique du Public Static (int I) Code> Méthode qui prend des entiers pour la plage spécifiée dans votre réponse à partir du cache interne, autrement renvoyé un nouvel entiers.
Integer y = 567; // y=567
Integer x = y; // x is equal to y object
System.out.println(x + " " + y); // out put x and y so obviously x and y are 567
System.out.println(y == x); // here x and y are in same reference. so this x==y is true and out put is true.
y++; // increment y by 1. then y=568
System.out.println(x + " " + y); // now x= 567 and y= 568
System.out.println(y == x);// now x not equals to y then false will print
y--; // again decrement y value
System.out.println(x + " " + y); // again x and y are same 567
System.out.println(y == x);// here y.value == x.value but x and y object wise not equal since object x and y are referring deference points
Faux, le == code> TOUJOURS B> Est-ce que vérification de référence d'objet. L'explication au 2e false code> est incorrecte.
@Buhakesindi je veux dire. Mais vous vous trompez. Maintenant je change quelques mots
Essayez y.equals (x) au lieu de ==.