2012-09-21 16 views
9

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?

+0

Si sta tentando di aggiungere int a breve tuttavia. a = b! = b = a –

+0

In realtà stai aggiungendo un int a un breve –

+3

Per interesse prova questo 'char ch = '0'; ch * = 1.2; 'ora ch è' '8'';) –

risposta

15
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 a E1 = (T)((E1) op (E2)), dove T è il tipo di E1, tranne che E1 viene valutata solo una volta.

- JLS §15.26.2

2

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.

+0

Ho scritto un'equazione errata. Ho aggiornato la mia domanda. Vedi il suo 'x = x + i'. –

+0

Ok, allora perché x = x + x; lavoro? Il problema non è sul numero 1 ma sull'operatore + che restituisce un int. – lleite

1

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.

Problemi correlati