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?

Était-ce utile?

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 + est String, 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top