Pourquoi ne
char ch = '4';
ch = '4' + 2;
de travail, mais
char ch = '4';
ch = ch + 2;
ne l'est pas?
Pourquoi ne
char ch = '4';
ch = '4' + 2;
de travail, mais
char ch = '4';
ch = ch + 2;
ne l'est pas?
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 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.