pourquoi ne char + autre ombles = un nombre bizarre
-
19-09-2019 - |
Question
Voici l'extrait de code:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
La sortie est la suivante:
195
Pourquoi est-ce le cas? Je pense que 'a' + 'b'
serait soit "ab"
, "12"
ou 3
.
ce qui se passe ici?
La solution
+
de deux char
est l'addition arithmétique, non concaténation de chaînes. Vous devez faire quelque chose comme "" + ca + cb
, ou utiliser des méthodes de String.valueOf
et Character.toString
pour veiller à ce qu'au moins un des opérandes de +
est un String
pour l'opérateur d'être concaténation de chaîne.
JLS 15,18 Opérateurs additif
Si le type de l'un des opérandes d'un opérateur
+
estString
, l'opération est la concaténation de chaîne.Dans le cas contraire, le type de chacun des opérandes de l'opérateur
+
doit être d'un type qui peut être converti en un type numérique primitive, ou une erreur se produit lors de la compilation.
Quant à savoir pourquoi vous obtenez 195, c'est parce que en ASCII, 'a' = 97
et 'b' = 98
et 97 + 98 = 195
.
effectue int
de base et de la coulée char
.
char ch = 'a';
int i = (int) ch;
System.out.println(i); // prints "97"
ch = (char) 99;
System.out.println(ch); // prints "c"
Cela ne tient pas la question du caractère des schémas de codage (qui un débutant ne doit pas inquiéter ... encore!).
Comme une note, Josh Bloch note qu'il est regrettable que +
est surchargé pour la concaténation de chaîne et l'ajout entier ( « Il a peut-être été une erreur de surcharger l'opérateur + pour la concaténation de chaîne. » - Java Puzzlers , Puzzle 11: The Last Laugh). Beaucoup de ce genre de confusion aurait pu être facilement évité en ayant un jeton différent pour concaténation de chaîne.
Voir aussi
Autres conseils
Je ne parle pas Java, mais 195 est 97 + 98 = les codes ASCII pour a
et b
. Alors, évidemment, ca
et cb
sont interprétées comme leurs valeurs entières, probablement à cause de l'addition +
qui ne semble pas conduire à une concaténation de chaîne automatiquement.
Si vous voulez avoir une chaîne comme résultat de l'opérateur + vous devez utiliser type String comme opérandes.
Vous devriez écrire:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
L'opérateur + appliqué sur des opérandes carbonisation se comporte comme la somme arithmétique.
L'opérateur +
ne fonctionne pas sur des personnages comme il le fait sur les chaînes. Ce qui se passe ici est que a
et b
sont jetés à leur entier codepoints ASCII - 97 et 98 -. Et additionnées