Pregunta

Aquí está el fragmento de código:

public static void main (String[]arg) 
{
    char ca = 'a' ; 
    char cb = 'b' ; 
    System.out.println (ca + cb) ; 
}

La salida es:

195

¿Por qué es este el caso? Me gustaría pensar que 'a' + 'b' sería o bien "ab", "12" o 3.

¿Qué está pasando aquí?

¿Fue útil?

Solución

+ de dos char es suma aritmética, no de concatenación de cadenas. Usted tiene que hacer algo como "" + ca + cb, o utilizar métodos String.valueOf y Character.toString para asegurarse de que al menos uno de los operandos de + es una String para que el operador sea la concatenación de cadenas.

JLS 15.18 operadores aditivos

  

Si el tipo de cualquiera de los operandos de un operador + es String, entonces la operación es la concatenación de cadenas.

     

De lo contrario, el tipo de cada uno de los operandos del operador + debe ser un tipo que es convertible en un tipo numérico primitivo, o se produce un error de tiempo de compilación.

En cuanto a por qué recibe 195, es debido a que en ASCII, y 'a' = 97 'b' = 98 y 97 + 98 = 195.


Esto realiza int y char moldeo básico.

 char ch = 'a';
 int i = (int) ch;   
 System.out.println(i);   // prints "97"
 ch = (char) 99;
 System.out.println(ch);  // prints "c"

Esto ignora el tema de los sistemas de codificación de caracteres (que un principiante no debe preocuparse ... todavía!).


Como nota, Josh Bloch observó que es bastante lamentable que + está sobrecargado tanto para la concatenación de cadenas y la adición de enteros ( "Puede haber sido un error de sobrecargar el operador + para la concatenación de cadenas." - Java Puzzlers , Puzzle 11: La última risa). Una gran cantidad de este tipo de confusión podría haber sido fácilmente evitado por tener una ficha diferente para la concatenación de cadenas.


Ver también

Otros consejos

No hablo de Java, pero 195 es de 97 + 98 = los códigos ASCII para a y b. Así que, obviamente, ca y cb se interpretan como sus valores enteros, probablemente debido a la adición + que no parece conducir a una concatenación de cadenas automáticamente.

Si usted quiere tener una cadena como resultado del operador + tiene que utilizar como operandos tipo String.

Usted debe escribir:

public static void main (String[]arg) 
{
    String ca = "a" ; 
    String cb = "b" ; 
    System.out.println (ca + cb) ; 
}

El operador + aplicada sobre operandos de carbonilla se comporta como la suma aritmética.

El operador + no opera sobre personajes como lo hace sobre las cuerdas. ¿Qué está pasando aquí es que a y b están siendo arrojados a sus puntos de código ASCII enteros - 97 y 98 -. Y luego se suman

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top