Se short
for automaticamente promovido a int
em operações aritméticas, então por que:
short thirty = 10 * 3;
Uma atribuição legal para a short
variá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 int
valor a a short
não é permitido sem a projeção conforme o esperado.
Há algo especial acontecendo com os literais numéricos?
10 * 3
e 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 10
nem 3
são calções nem são promovidos, eles são literais.
10
e 3
são avaliados como int
s 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).