Mój kolega zadał mi to pytanie i jestem trochę zmieszany.Dodawanie int do krótkiego
int i = 123456;
short x = 12;
Oświadczenie
x += i;
kompiluje jednak
x = x + i;
nie
Co Java tu robi?
Mój kolega zadał mi to pytanie i jestem trochę zmieszany.Dodawanie int do krótkiego
int i = 123456;
short x = 12;
Oświadczenie
x += i;
kompiluje jednak
x = x + i;
nie
Co Java tu robi?
int i = 123456;
short x = 12;
x += i;
jest rzeczywiście
int i = 123456;
short x = 12;
x = (short)(x + i);
Zważywszy x = x + i
jest po prostu x = x + i
. Nie jest on automatycznie rzutowany jako short
i dlatego powoduje błąd (x + i
jest typu int
).
Związek przyporządkowanie ekspresja postaci
E1 op= E2
odpowiadaE1 = (T)((E1) op (E2))
, gdzieT
jest typE1
wyjątkiem, żeE1
jest obliczane tylko raz.
Liczby są traktowane jako int
chyba że specjalnie rzucać je inaczej. Tak więc w drugim stwierdzeniu, w którym zamiast zmiennej używa się liczby literalnej, nie jest ona automatycznie rzutowana na odpowiedni typ.
x = x + (short)1;
... powinien działać.
Napisałem złe równanie. Zaktualizowałem moje pytanie. Zobacz jego 'x = x + i'. –
Ok, to dlaczego nie x = x + x; praca? Problem nie występuje na numerze 1, ale na operatorze +, który zwraca wartość int. – lleite
Operator +
integralnych typów (INT, krótkie Char bajt) zawsze zwraca int jako wynik.
Widać, że z tym kodem:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
To nie będzie skompilować chyba x
jest int
.
Próbujesz dodać int do krótkich jednak. a = b! = b = a –
W rzeczywistości dodajesz int do krótkiego –
Dla zainteresowania spróbuj tego 'char ch = '0'; ch * = 1.2; 'now ch jest' '8'';; –