2012-04-27 16 views
5

Según entiendo, un char es un carácter único, es decir, una letra, dígito, un signo de puntuación, una pestaña, un espacio o algo similar. Y por lo tanto cuando lo hago:Añadiendo char e int

char c = '1'; 
System.out.println(c); 

La salida 1 fue exactamente lo que esperaba. ¿Por qué es que cuando hago esto:

int a = 1; 
char c = '1'; 
int ans = a + c; 
System.out.println(ans); 

termino con la salida ?

+0

posible duplicado de [En Java, ¿es el resultado de la adición de dos caracteres un int o un char?] (Http://stackoverflow.com/questions/8688668/in-java -is-the-result-of-the-addition-of-two-chars-an-int-or-a-char) – vaxquis

Respuesta

5

Lo está obteniendo porque está agregando el ASCII value del parche. Primero debes convertirlo a int.

2

El número 1 es código ASCII 49. El compilador está haciendo lo único sensato que puede hacer con su solicitud, y encasillado a int.

+0

simplemente agregando referencia, aunque puede pedir al compilador que también genere esta tabla http: // www. asciitable.com/ – Geek

0

A char es un int disfrazado. Un char representa un personaje codificándolo en un int. Entonces, por ejemplo, 'c' está codificado con 49. Cuando los agregas juntos, obtienes un int que es la suma del código del char y el valor de int.

+0

No es un 'int disfrazado', sino que es un valor entero (número entero). – delicateLatticeworkFever

+0

@goldilocks lo que dices es exactamente lo que quise decir. –

+2

Bien, pero (para nitpick; /) un 'int' es un tipo de Java, y un char no es un disfraz para un tipo int. Es un char, pero tiene un valor * entero * (como lo hace un 'int'). – delicateLatticeworkFever

2

Se termina con salir de 50 porque has dicho Java para tratar el resultado de la suma como un int en la siguiente línea:

int ans = a + c; 

En lugar de int se declara ans como char.

así:

final int a = 1; 
final char c = '1'; 
final char ans = (char) (a + c); 
System.out.println(ans); 
0

'1' es un dígito, no un número, y está codificado en ASCII para ser de valor 49.

Caracteres en Java pueden ser promovidos a int, así que si le preguntas a añadir un int como 1 a un char como '1', alias 49, el tipo char más estrecha es promovido a int, consiguiendo 49, + 1 => 50.

Nota que cada Char no dígito se puede agregar la misma manera:

'a' + 0 = 97 
'A' + 0 = 65 
' ' + 0 = 32