Si shortse promueve automáticamente a inten operaciones aritméticas, entonces por qué es:
short thirty = 10 * 3;
¿Una cesión legal a la shortvariable 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 intvalor a a shortsin convertir como se esperaba.
¿Está sucediendo algo especial con los literales numéricos?
10 * 3e 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 10tampoco 3son cortos ni son promovidos, son literales.
10y el compilador los 3evalúa como ints?
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).