Si shortest automatiquement promu intdans les opérations arithmétiques, alors pourquoi:
short thirty = 10 * 3;
Une affectation légale à la shortvariable thirty?
À son tour, ceci:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
ainsi que cette:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
ne compile pas car l'attribution d'une intvaleur à a shortn'est pas autorisée sans la conversion comme prévu.
Y a-t-il quelque chose de spécial à propos des littéraux numériques?
10 * 3et initialise la variable avec le résultat. Dans votre exemple non fonctionnel, le calcul se produit au moment de l'exécution, où la JVM lance le court-circuit.
final int ten = 10; final int three = 3; short thirty = ten * three;compile bien.
If short is automatically promoted to int in arithmetic operations- ce n'est pas pertinent. Ni 10ne 3sont courts et ne sont pas promus, ils sont littérales.
10et 3sont évalués comme ints par le compilateur?
short thirty = 10 * 3;est très probablement remplacé parshort thirty = 30;le compilateur qui est alors une instruction valide. (Je devrais cependant rechercher la section JLS pertinente).