2017-03-06 9 views
3
public static void main(String[] args) { 
    Character x = ' '; 
    while (x++ < 50) { 
     int p = x; 
    } 
    System.out.println(x instanceof Character); 
    } 

Parce que c'est une opération unaire ++. x est décompacté en char, puis élargi en int avant que l'opération ne soit effectuée. Quand je quitte la boucle, je deviens 'vrai'. Je n'arrive pas à comprendre comment int peut être encadré dans Character Back; java peut permettre à la boxe d'int en entier ou la boxe et l'élargissement int en nombre, objet, etc.Boxe après opération unaire sur un caractère

Répondre

2

La réponse se trouve dans la spécification du langage Java §15.14.2 Postfix Increment Operator ++

(souligné par moi)

Au moment de l'exécution , si l'évaluation de l'expression de l'opérande se termine brutalement, l'expression d'incrément de suffixe se termine brusquement pour pour la même raison et aucune incrémentation ne se produit. Sinon, la valeur 1 est ajoutée à la valeur de la variable et la somme est enregistrée dans la variable . Avant l'ajout, la promotion numérique binaire (§5.6.2) est effectuée sur la valeur 1 et la valeur de la variable. Si nécessaire, la somme est réduite par une conversion de primitive rétrécissante (§5.1.3) et/ou soumise à une conversion de boxe (§5.1.7) au type de la variable avant qu'elle ne soit stockée. La valeur de l'expression postfix increment est la valeur de la variable avant que la nouvelle valeur soit stockée.