comment l'égalité de l'opérateur travaille avec des primitives et de l'objet type de données
Je sais que c'est une question très simple, mais je veux être clair sur le concept. Je veux savoir comment ==
opérateur fonctionne en cas de primitif et le type d'objet. Par exemple
Integer a = 1;
int b = 1;
System.out.println(a == b)
comment a
est comparé avec b
, alors que a
contenir la ref de l'objet qui contient la valeur 1. Quelqu'un peut-il clearify il m'comment il fonctionne en interne?
Avoir un regard sur les réponses à question, qui est étroitement liée. Vous pouvez aussi lire sur les auto-unboxing, qui sera utilisé dans le code que vous avez cité.
docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Double Possible de Lors de l'utilisation de == pour un primitif et un coffret de la valeur, est l'autoboxing fait, ou est unboxing fait
docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Double Possible de Lors de l'utilisation de == pour un primitif et un coffret de la valeur, est l'autoboxing fait, ou est unboxing fait
OriginalL'auteur Still Learning | 2015-03-19
Vous devez vous connecter pour publier un commentaire.
En général l'opérateur d'égalité en Java effectue un soi-disant peu profonde de comparaison. En d'autres termes, il compare les valeurs des variables contient. Maintenant les variables de types de données primitifs contient la valeur elle-même, tandis que les types de référence contient des références à des tas de zone qui stocke le contenu réel. Cela signifie que dans votre extrait de code
int b
tiendra valeur1
etInteger a
va contenir l'adresse de la mémoire réelle de l'Entier de l'objet sur le tas.Maintenant dans l'exemple fourni par vous, il ya un pecularity. Entier spéciales de catégorie a classe wrapper qui encapsule primitive types d'entiers. Le compilateur peut convertir automatiquement entre ces wrapper des objets et des types primitifs (qui est appelé boxing et unboxing).
Attardons-nous un vous code étape par étape tgo le rendre clair.
Le compilateur fait substituer le code suivant place de cette ligne:
La méthode statique
valueOf
retourne un wrapper instance de l'objet qui encapsule la condition primitive de la valeur. Cette procédure lorsque le compilateur construit une classe wrapper d'un type primitif est appelé boxe.Lors de l'utilisation d'un tel objet wrapper est comparé avec une primitive de la variable à l'aide opérateur d'égalité
le compilateur fait les modifications suivantes:
où
intValue
renvoie la valeur primitive enveloppé par l'objet wrapper (qui est appelé unboxing) c'est à dire qu'il unboxes la valeur primitive et de faire de l'expression équivalente à la comparaison de deux primitives. C'est pourquoi l'opérateur d'égalité est ensuite retournétrue
OriginalL'auteur akhilless
Dans votre exemple boxed de type Integer sera unboxed à un type primitif int et
==
permettra de comparer les primitives (c'est à dire de vrai dans votre cas).Pas sûr si j'ai bien compris votre commentaire, mais voici une spécification pour l'unboxing de conversion: docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.8
oui, la comparaison d'un objet wrapper avec un type primitif résultats dans unboxing de sorte que vous vous retrouvez la comparaison de deux valeurs primitives, voir ma réponse
OriginalL'auteur Sergey Pauk