Lorsque vous appliquez l' +
de l'opérateur pour les types intégraux
Binaire numérique de la promotion est effectuée sur les opérandes (§5.6.2).
Dans ce cas, l' char
des valeurs sont promues int
valeurs.
Ici
char c = 'c';
char d = c + 5;
parce qu' c
n'est pas une expression constante, le compilateur ne peut pas déterminer si la valeur de c + 5
qui est un int
sera en mesure de tenir dans une char
.
Dans ce
final char c = 'c';
char d = c + 5;
où c
est une expression constante, le compilateur peut déterminer que la valeur de c
, ce qui est 99
, ajouté à l' 5
, ce qui est 104
ne rentre pas dans un char
. En raison de cette garantie, Java peut effectuer en toute sécurité un rétrécissement de conversion de int
de char
.
Si, au contraire, avait
final char a = Character.MAX_VALUE;
char b = (a + 5);
vous souhaitez voir le même comportement que votre premier test en tant que valeur de a + 5
ne tient pas dans un char
. Le compilateur détermine que l' int
de la valeur résultant de l' a + 5
ne s'inscrirait pas dans une char
.