¿por qué un char + otra Char = un número raro
-
19-09-2019 - |
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í?
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
+
esString
, 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