Jeśli shortjest automatycznie promowany do intw operacjach arytmetycznych, to dlaczego:
short thirty = 10 * 3;
Prawne przypisanie do shortzmiennej 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 intwartości do a shortnie jest dozwolone bez rzutowania zgodnie z oczekiwaniami.
Czy jest coś specjalnego w literałach liczbowych?
10 * 3i 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 10też nie 3są szorty, ani nie są promowane, są literały.
10i 3są oceniane jako ints 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).