51 votes

Pourquoi ne pouvez-vous pas ajouter un int et un char dans certains cas?

Pourquoi ne

char ch = '4';
ch = '4' + 2;

de travail, mais

char ch = '4';
ch = ch  + 2;

ne l'est pas?

62voto

Chris K Points 5756

Pour le comprendre, considérons ce que le compilateur ne à chaque étape les deux possibilités. Permet de commencer avec:

ch = '4' + 2;

Le compilateur convertit '4' pour un int. Ainsi, il devient

ch = 52 + 2;

Le compilateur se transforme alors en

ch = 54;

ch est un char, et le compilateur est autorisé à convertir 54 pour un char qu'il puisse prouver qu'il n'y a pas de perte à la conversion.

Maintenant, considérons la deuxième version:

ch = ch  + 2;

ch n'a pas de valeur connue au moment de la compilation. Donc cela devient

ch = ((int) ch) + 2;

Maintenant que le compilateur ne peut pas prouver que la suite (un int) est à ranger dans la gamme d'un char. Donc il ne sera pas automatiquement étroites, et des rapports qu'il y a comme une erreur.

EDIT1:

Si le compilateur ne peut pas prouver que la variable ne changera jamais, et il est inlineable. Puis la seconde forme peut être transformé en la première. Subir souligné que l'ajout de "finale" de ce fait possible. Bien que si un compilateur été d'effectuer une analyse du changement alors qu'il est techniquement capable de comprendre ce sans le mot-clé final, mais au final, il est plus facile pour le compilateur et les lecteurs de code.

EDIT2:

Rétrécissement de l'int en char est couvert dans le Langage Java Spec, le lien a été aimablement fourni par Jon Skeet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X