Qualcuno può spiegarmi perché il seguente codice viene compilato correttamente in Java?Aritmetica di interi in Java con char e intero letterale
char c = 'a' + 10;
Perché questo non è equivalente al seguente, che non viene compilato?
int i = 10;
char c = 'a' + i;
Java Language Specification (sezione 3.10.1) indica "Un numero intero letterale è di tipo long
se suffisso una lettera ASCII L o L (elle), altrimenti è di tipo int
(§4.2 .1)." La sezione 4.2.2 fa riferimento a "Gli operatori numerici, che risultano in un valore di tipo int
o long
". Quindi il risultato dell'aggiunta dovrebbe, a mio avviso, essere un int
, che non può essere assegnato alla variabile char
c
.
Tuttavia, compila bene (almeno in SunJDK 1.6.0 versione 17 e in Eclipse Helios).
Piuttosto un esempio artificiale, forse, ma è utilizzato in un corso introduttivo di Java che ho insegnato, e ora mi viene in mente che non capisco veramente perché funzioni.
Grazie a tutti quelli che hanno risposto. Per chiunque sia interessato, la sezione 5.2 della specifica della lingua (Conversione di assegnazione) in realtà dice "Inoltre, se l'espressione è un'espressione costante (§15.28) di tipo byte, short, char o int: ... Una restringente conversione primitiva può essere usato se il tipo della variabile è byte, short o char e il valore dell'espressione costante è rappresentabile nel tipo della variabile. " – Ben
Se tu, come me, capita di inciampare su questo perché vuoi sapere come effettivamente convertire un char indicizzato in una stringa, ecco qua; quando 'i = 2' quindi' String.valueOf ((char) ('a' + i)) 'restituisce la stringa" c ". – JohnnyLambada