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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top