Se shortviene promosso automaticamente a intnelle operazioni aritmetiche, perché è:
short thirty = 10 * 3;
Un'assegnazione legale alla shortvariabile 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 intvalore a a shortnon è consentita senza eseguire il cast come previsto.
C'è qualcosa di speciale sui letterali numerici?
10 * 3e 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é 3sono pantaloncini né sono promossi, sono letterali.
10e 3vengono valutati come ints 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ò).