Si short
se promueve automáticamente a int
en operaciones aritméticas, entonces por qué es:
short thirty = 10 * 3;
¿Una cesión legal a la short
variable thirty
?
A su vez, esto:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
tan bien como esto:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
no se compila porque no se permite asignar un int
valor a a short
sin convertir como se esperaba.
¿Está sucediendo algo especial con los literales numéricos?
10 * 3
e inicializa la variable con el resultado. En su ejemplo no funcional, el cálculo ocurre en tiempo de ejecución donde la JVM lanza el corto.
final int ten = 10; final int three = 3; short thirty = ten * three;
compila bien.
If short is automatically promoted to int in arithmetic operations
- eso no es relevante. Ni 10
tampoco 3
son cortos ni son promovidos, son literales.
10
y el compilador los 3
evalúa como int
s?
short thirty = 10 * 3;
Lo más probable es que sea reemplazado porshort thirty = 30;
el compilador, que es una declaración válida. (Sin embargo, tendría que buscar la sección JLS relevante).