En java si "char c = 'a'" pourquoi ne "c = c + 1" ne compilera pas?

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 += 1ou 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 + 1est un int, comme opérandes subissent la promotion numérique binaire :

  • c est un char
  • 1 est un int

donc cdoit être élargie pour le intrendre 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'expression char, 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 type char , donc pas coulé est nécessaire.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=222258&siteId=1
conseillé
Classement