2015-07-22 1 views
-1
public class Application { 
    public static void main(String[] args) { 
     Integer a = new Integer(10); 
     Integer b = new Integer(10); 
     int x = new Integer(10); 
     int y = new Integer(10); 
     int p = 10; 
     int q = 10; 

     System.out.println(a == b); 
     System.out.println(a == x); 
     System.out.println(x == p); 
     System.out.println(b == q); 
     System.out.println(y == q); 
     System.out.println(x == y); 

    } 
} 

Le code ci-dessus produit la sortie:Comment les comparaisons ont lieu dans le code ci-dessous

false 
true 
true 
true 
true 
true 
  1. S'il vous plaît expliquer le processus de type primitif se par rapport à un type de référence en utilisant ==?
  2. comment int x = new Entier (10); se faire évaluer en interne?
+0

Vous pourriez être intéressé par la comparaison d'un type primitif avec la valeur de Object mais pas avec l'objet. –

+0

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – Cratylus

+0

Exactement monsieur, mon but est d'obtenir mon concept effacé sur la façon dont les types primitifs OBTIENNENT par rapport à la valeur de l'objet et aussi sur ce type de valeur "b" hold et comment unboxing fonctionne quand "b" est comparé à "q". – Eddy

Répondre

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

a==b --->variable de référence a est comparée à la variable de référence b. Pas l'objet vers lequel ils pointent. Et ces deux variables de référence sont en effet différentes. Par conséquent, faux. Utilisez .equals() pour comparer des objets.

a==x --->auto-unboxing. x contient la valeur 10. lors de la comparaison, Integer est comparé à int. Lorsque l'encapsuleur est comparé à la prémitive, l'auto-déballage se produit. un devient un int. Et donc, effectivement 10 est comparé à 10. Donc, c'est vrai.

x==p,b==q,y==q,x==y ->même. Auto-déballage, prenant effet. D'où tout est vrai.

Chaque fois que Java compare une variable de classe wrapper avec une variable primitive, il unboxes la variable de classe wrapper dans une primitive, puis les compare.

avec ce SDK Compile précédent Java 5, et je doute qu'il compilerait du tout. Java a introduit cette fonctionnalité à partir de Java 5. Si je me souviens bien ..

1

Lorsque vous comparez la int primitive avec sa classe enveloppe Integer, l'emballage est unboxed à sa valeur primitive. C'est pourquoi vous devenez toujours sauf la première condition.

Dans la première condition, vous vérifiez l'égalité de référence de deux objets différents, ce qui sera évidemment faux.

+0

thnx réponse 4 d, c'était utile – Eddy

1

== pour les classes compare les références. Lorsque vous créez 2 objets avec les mêmes valeurs, vous devez utiliser .equals() car les 2 objets instanciés avec new auront des références différentes. Lors de l'utilisation int il compare les valeurs parce qu'elles sont primitives et passant dans new Integer() dans un intint crée une primitive.