Jeśli short
jest automatycznie promowany do int
w operacjach arytmetycznych, to dlaczego:
short thirty = 10 * 3;
Prawne przypisanie do short
zmiennej thirty
?
Z kolei to:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
tak dobrze jak to:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
nie kompiluje się, ponieważ przypisanie int
wartości do a short
nie jest dozwolone bez rzutowania zgodnie z oczekiwaniami.
Czy jest coś specjalnego w literałach liczbowych?
10 * 3
i inicjalizuje zmienną z wynikiem. W twoim niedziałającym przykładzie obliczenia są wykonywane w czasie wykonywania, gdzie JVM rzuca skrót.
final int ten = 10; final int three = 3; short thirty = ten * three;
kompiluje się dobrze.
If short is automatically promoted to int in arithmetic operations
- to nie ma znaczenia. Ani 10
też nie 3
są szorty, ani nie są promowane, są literały.
10
i 3
są oceniane jako int
s przez kompilator?
short thirty = 10 * 3;
jest najprawdopodobniej zastępowany przezshort thirty = 30;
kompilator, który jest wówczas prawidłową instrukcją. (Musiałbym jednak sprawdzić odpowiednią sekcję JLS).