Sisters Weiss Lipschitz:
J'ai essayé de compiler le code suivant:
public static void main(String[] args){
for (char c = 'a'; c <='z'; c = c + 1) {
System.out.println(c);
}
}
Quand je tente de compiler, il lance:
Erreur: (5, 41) java: types incompatibles: la conversion possible lossy de int CHAR
La chose est, il ne fonctionne pas si je vous écris c = (char)(c + 1)
, c += 1
ou c++
.
J'ai vérifié et le compilateur génère une erreur similaire lorsque je tente , char c = Character.MAX_VALUE + 1;
mais je ne vois aucun moyen que la valeur du type « c » peut passer « char » maximum dans la fonction d' origine.
Andy Turner:
c + 1
est un int
, comme opérandes subissent la promotion numérique binaire :
c
est unchar
1
est unint
donc c
doit être élargie pour le int
rendre compatible pour l' addition; et le résultat de l'expression est de type int
.
En ce qui concerne les choses que « travail »:
c = (char)(c + 1)
est coulée explicitement l'expressionchar
, de sorte que sa valeur est compatible avec le type de la variable;c += 1
est équivalent àc = (char) ((c) + (1))
, il est donc fondamentalement le même que le précédent.c++
est de typechar
, donc pas coulé est nécessaire.