6
votes

Incrémenter et décrémenter la modification de la valeur d'objet

Quelqu'un peut-il me dire la raison de la modification de la sortie.

567 567

true

567 568

false

567 567

False


1 commentaires

Essayez y.equals (x) au lieu de ==.


8 Réponses :


0
votes

Parce que X et Y se réfèrent à 2 objets différents.

y--;


0 commentaires

0
votes

y == x 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 . Surtout lorsque x, y> = 128 .

Utilisez xxx

ou xxx p > ou déclarer x et y comme int à la place.

Notez que l'auto-boîte automatique ne se produit pas dans INTEGER == INTEGER ou INTEGER! = INTEGER .


0 commentaires

3
votes

Changez votre

    int y = 567;
    int x = y;


0 commentaires

0
votes

Lorsque vous utilisez la primitive int au lieu du entier . La sortie finale serait true .

Cependant, lorsque vous utilisez la classe entier , ils sont objet s. Si vous utilisez la méthode égale La sortie finale serait true .


1 commentaires

lorsque vous utilisez Enger au lieu de la primitive Int. La sortie finale serait vraie. . Quoi?



5
votes

Vous utilisez integer code> qui est un objet immuable.

Fondamentalement, votre code est p>

y = new Integer(y.intValue() - 1);


2 commentaires

Le compilateur utilisera integer.valueof () au lieu du constructeur.


@BuhaKeIndi J'ai utilisé le constructeur pour en faire plus clairement, de ne pas montrer ce que fait la JVM.



2
votes

Ceci est parce que le compilateur le fait en interne: xxx

signifie: xxx

donc, y y est un nouvel INTEGER instance. Vous faites une vérification de référence d'objet (lors de l'utilisation de == ) et non de la vérification de l'égalité de valeur.

Utilisez Equals () méthode pour évaluer 2 valeurs. < / p>


0 commentaires

-1
votes

Même, si vous créez

Integer a = new Integer(1);
Integer b = new Integer(1);


1 commentaires

Dans Java Nouveau Opérateur Toujours Allocatez la mémoire pour un nouvel objet. C'est contraire à la valeur entière statique du Public Static (int I) 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.



1
votes
    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  

2 commentaires

Faux, le == TOUJOURS Est-ce que vérification de référence d'objet. L'explication au 2e false est incorrecte.


@Buhakesindi je veux dire. Mais vous vous trompez. Maintenant je change quelques mots