2012-04-27 16 views
5

A quanto mi risulta un carattere è un carattere singolo, ovvero una lettera, una cifra , un segno di punteggiatura, una scheda, uno spazio o qualcosa di simile. E quindi quando lo faccio:Aggiunta di char e int

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

L'uscita 1 era esattamente quello che mi aspettavo. Allora perché è che quando faccio questo:

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

io alla fine con l'uscita ?

+0

possibile duplicato di [In Java, è il risultato dell'aggiunta di due caratteri un int o un carattere?] (Http://stackoverflow.com/questions/8688668/in-java -è-il-risultato-dell'aggiunta-di-due-caratteri-un-int-o-un-carattere) – vaxquis

risposta

5

Lo stai ottenendo perché sta aggiungendo il ASCII value del char. Devi prima convertirlo in un int.

2

Il numero 1 è codice ASCII 49. Il compilatore sta facendo l'unica cosa ragionevole che può fare con la richiesta e il typecasting su int.

+0

solo aggiungendo riferimento, anche se è possibile chiedere al compilatore di produrre anche questa tabella http: // www. asciitable.com/ – Geek

0

Un char è un int nascosta. Un carattere rappresenta un carattere codificandolo in un int. Quindi per esempio 'c' è codificato con 49. Quando li aggiungi, ottieni un int che è la somma del codice del char e il valore dell'int.

+0

Non è un 'int nascosta', ma è un valore intero (numero intero). – delicateLatticeworkFever

+0

@goldilocks quello che stai dicendo è esattamente quello che intendevo. –

+2

Ok, ma (per nitpick; /) un 'int' è un tipo java, e un char non è un travestimento per un tipo int. È un char, ma ha un valore * intero * (come un 'int'). – delicateLatticeworkFever

2

si finisce con fuori 50 perché hai detto Java per trattare il risultato della somma come int nella seguente riga:

int ans = a + c; 

Invece di int si dichiara ans come char.

Come così:

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

'1' è una cifra, non un numero, ed è codificato in ASCII per essere di valore 49.

Caratteri in Java possono essere promossi a int, quindi se si chiede di aggiungere un int come a 1 un char come '1', alias 49, il tipo char più ristretta è promosso a int, ottenendo 49, + 1 => 50.

Nota che ogni char non sia una cifra può essere aggiunto allo stesso modo:

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