Se shortfor automaticamente promovido a intem operações aritméticas, então por que:
short thirty = 10 * 3;
Uma atribuição legal para a shortvariável thirty?
Por sua vez, este:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
assim como isso:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
não compila porque atribuir um intvalor a a shortnão é permitido sem a projeção conforme o esperado.
Há algo especial acontecendo com os literais numéricos?
10 * 3e inicializa a variável com o resultado. Em seu exemplo não funcional, o cálculo acontece no tempo de execução onde a JVM converte o curto.
final int ten = 10; final int three = 3; short thirty = ten * three;compila bem.
If short is automatically promoted to int in arithmetic operations- isso não é relevante. Nem 10nem 3são calções nem são promovidos, eles são literais.
10e 3são avaliados como ints pelo compilador?
short thirty = 10 * 3;é provavelmente substituído peloshort thirty = 30;compilador, que é uma instrução válida. (Eu teria que procurar a seção JLS relevante).