Dans le programme ci-dessous, nous pouvons effectuer l'opération ch1 ++ mais pas en mesure d'exécuter ch1 = ch1 + 1
public static void main(String[] args) {
// TODO Auto-generated method stub
char ch1 = 88;
System.out.println("Ch1 is " + ch1);
ch1=ch1+1;
ch1++;
System.out.println("ch1 is "+ch1);
}
3 réponses
ch1+1
a un type entier, vous devez le convertir en char, comme ça:
(char)(ch1+1)
En plus de détails:
Java voir deux valeurs, un type char, un type entier (1 est un entier), pour effectuer l'opération +
, java doit avoir les deux arguments identiques, le moyen le plus sûr est de promouvoir char
en {{X2} }, c'est pourquoi le résultat est int
ch1++
est différent, java traite cette construction comme:
ch1 = (char)(ch1+1)
Donc, la distribution est ajoutée automatiquement
Selon la spécification Java,
Le type d'une expression additive sur les opérandes numériques est le type promu de ses opérandes.
Tandis que
le type du préfixe et postfix expression d'incrémentation est le type de la variable ... Avant l'ajout, une promotion numérique binaire (§5.6.2) est effectuée sur la valeur 1 et la valeur de la variable. Si nécessaire, la somme est rétrécie par une conversion primitive restrictive (§5.1.3) et / ou soumise à une conversion boxing (§5.1.7) au type de la variable avant qu'elle ne soit stockée.
(pas d'italique dans l'original)
Donc, utiliser +
applique d'abord un Élargissement de la conversion primitive aux opérandes, les transformant en entiers, puis conserve ce type promu comme résultat de l'expression. ++
applique également la promotion, mais ajoute également une étape de réduction par la suite afin que le type de résultat soit le même que le type de la variable d'origine.
Ce comportement a du sens, car vous savez qu'un ++
modifie la valeur du paramètre d'origine, alors que le résultat d'une opération +
pourrait être enregistré dans une autre valeur:
int i = Character.MAX_VALUE + 1;
Comme le soulignent les autres réponses, si vous souhaitez enregistrer le résultat d'une addition dans une variable de caractère, le résultat entier d'une opération +
devra être converti en char
, comme ce:
ch1 = (char)(ch1+1)
Vous devez lancer ch + 1 en a (char), car le résultat de 1 + ch1 est un int
ch1=(char)ch1+1;
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].