¿Puede alguien explicarme por qué el siguiente código compila OK en Java?Aritmética de enteros en Java con char y entero literal
char c = 'a' + 10;
¿Por qué esto no es equivalente al siguiente, que no se compila?
int i = 10;
char c = 'a' + i;
La Especificación del Lenguaje Java (sección 3.10.1) afirma que "un literal entero es de tipo long
si se añade como sufijo con una letra ASCII L o L (ELL), de lo contrario es de tipo int
(§4.2 .1). " La Sección 4.2.2 se refiere a "Los operadores numéricos, que dan como resultado un valor de tipo int
o long
". Entonces, el resultado de la adición debe, en mi entender, ser un int
, que no se puede asignar a la variable char
c
.
Sin embargo, compila bien (al menos en Sun JDK 1.6.0 versión 17 y en Eclipse Helios).
Más bien un ejemplo artificial tal vez, pero se usa en un curso introductorio de Java que he estado enseñando, y ahora se me ocurre que realmente no entiendo por qué funciona.
Gracias a todos los que respondieron. Para cualquier persona interesada, la sección 5.2 de la especificación de idioma (Conversión de asignación) dice "Además, si la expresión es una expresión constante (§15.28) de tipo byte, short, char o int: ... Una conversión primitiva de estrechamiento puede usarse si el tipo de la variable es byte, short o char, y el valor de la expresión constante es representable en el tipo de la variable ". – Ben
Si usted, como yo, tropieza con esto porque quiere saber cómo convertir realmente un carácter indexado en una cadena, aquí va; cuando 'i = 2' luego' String.valueOf ((char) ('a' + i)) 'devuelve la cadena" c ". – JohnnyLambada