Se short
viene promosso automaticamente a int
nelle operazioni aritmetiche, perché è:
short thirty = 10 * 3;
Un'assegnazione legale alla short
variabile thirty
?
A sua volta, questo:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
oltre a questo:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
non si compila perché l'assegnazione di un int
valore a a short
non è consentita senza eseguire il cast come previsto.
C'è qualcosa di speciale sui letterali numerici?
10 * 3
e inizializza la variabile con il risultato. Nel tuo esempio non funzionante il calcolo avviene in fase di runtime in cui JVM lancia lo short.
final int ten = 10; final int three = 3; short thirty = ten * three;
compila bene.
If short is automatically promoted to int in arithmetic operations
- non è rilevante. Né 10
, né 3
sono pantaloncini né sono promossi, sono letterali.
10
e 3
vengono valutati come int
s dal compilatore?
short thirty = 10 * 3;
molto probabilmente è sostituito dalshort thirty = 30;
compilatore che è un'istruzione valida allora. (Dovrei cercare la sezione JLS pertinente però).