Una mia collega mi ha fatto questa domanda e io sono un po 'confuso.Aggiunta int a short
int i = 123456;
short x = 12;
La dichiarazione
x += i;
compila bene però
x = x + i;
non
Cos'è Java fai qui?
Una mia collega mi ha fatto questa domanda e io sono un po 'confuso.Aggiunta int a short
int i = 123456;
short x = 12;
La dichiarazione
x += i;
compila bene però
x = x + i;
non
Cos'è Java fai qui?
int i = 123456;
short x = 12;
x += i;
è in realtà
int i = 123456;
short x = 12;
x = (short)(x + i);
Mentre x = x + i
è semplicemente x = x + i
. Non esegue automaticamente il cast come short
e quindi causa l'errore (x + i
di tipo int
).
Un assegnamento espressione composto della forma
E1 op= E2
è equivalente aE1 = (T)((E1) op (E2))
, doveT
è il tipo diE1
, tranne cheE1
viene valutata solo una volta.
I numeri vengono considerati come int
a meno che non vengano espressi diversamente. Pertanto, nella seconda istruzione quando si utilizza un numero letterale anziché una variabile, non lo trasmette automaticamente al tipo appropriato.
x = x + (short)1;
... dovrebbe funzionare.
Ho scritto un'equazione errata. Ho aggiornato la mia domanda. Vedi il suo 'x = x + i'. –
Ok, allora perché x = x + x; lavoro? Il problema non è sul numero 1 ma sull'operatore + che restituisce un int. – lleite
La +
operatore di tipi interi (int, breve, char e byte) restituisce sempre un int come risultato.
si può vedere che con questo codice:
//char x = 0;
//short x = 0;
//byte x = 0;
int x = 0;
x = x + x;
non si compila a meno che x
è un int
.
Si sta tentando di aggiungere int a breve tuttavia. a = b! = b = a –
In realtà stai aggiungendo un int a un breve –
Per interesse prova questo 'char ch = '0'; ch * = 1.2; 'ora ch è' '8'';) –