Por que um char + outro char = um número estranho
-
19-09-2019 - |
Pergunta
Aqui está o trecho de código:
public static void main (String[]arg)
{
char ca = 'a' ;
char cb = 'b' ;
System.out.println (ca + cb) ;
}
A saída é:
195
Por que esse é o caso? Eu pensaria que 'a' + 'b'
seria também "ab"
, "12"
, ou 3
.
O que está acontecendo aqui?
Solução
+
de dois char
é adição aritmética, não concatenação de cordas. Você tem que fazer algo como "" + ca + cb
, ou uso String.valueOf
e Character.toString
métodos para garantir que pelo menos um dos operandos de +
é um String
Para que o operador seja concatenação de string.
JLS 15.18 Operadores aditivos
Se o tipo de qualquer um operando de um
+
operador éString
, então a operação é concatenação de string.Caso contrário, o tipo de cada um dos operandos do
+
O operador deve ser um tipo conversível para um tipo numérico primitivo ou ocorre um erro de tempo de compilação.
Sobre o motivo de você ter 195, é porque em ASCII, 'a' = 97
e 'b' = 98
, e 97 + 98 = 195
.
Isso tem desempenho básico int
e char
elenco.
char ch = 'a';
int i = (int) ch;
System.out.println(i); // prints "97"
ch = (char) 99;
System.out.println(ch); // prints "c"
Isso ignora a questão dos esquemas de codificação de caracteres (com os quais um iniciante não deve se preocupar ... ainda!).
Como uma nota, Josh Bloch observou que é infeliz que +
está sobrecarregado para a concatenação de string e a adição inteira ("Pode ter sido um erro sobrecarregar o operador + para concatenação de strings." - - Java Puzzlers, Quebra -cabeça 11: a última risada). Muitos desses tipos de confusão poderiam ter sido facilmente evitados por ter um token diferente para concatenação de string.
Veja também
Outras dicas
Eu não falo java, mas 195 é 97 + 98 = os códigos ASCII para a
e b
. Então, obviamente, ca
e cb
são interpretados como seus valores inteiros, provavelmente por causa do +
adição que não parece levar a uma concatenação de string automaticamente.
Se você deseja ter uma string como resultado do operador +, deve usar a string do tipo como operandos.
Você deveria escrever:
public static void main (String[]arg)
{
String ca = "a" ;
String cb = "b" ;
System.out.println (ca + cb) ;
}
O operador + aplicado em operandos de char se comporta como a soma aritmética.
o +
O operador não opera em caracteres como o que acontece com as cordas. O que está acontecendo aqui é que a
e b
estão sendo lançados em seus pontos de código ASCII inteiros - 97 e 98 - e depois adicionados.