Si short
est automatiquement promu int
dans les opérations arithmétiques, alors pourquoi:
short thirty = 10 * 3;
Une affectation légale à la short
variable 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 int
valeur à a short
n'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 * 3
et 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 10
ne 3
sont courts et ne sont pas promus, ils sont littérales.
10
et 3
sont évalués comme int
s 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).