2012-11-28 15 views
5

Considerate questo codice:Perché questo incarico non richiede un cast esplicito?

byte b=1; 
long l=1000; 
b += l; 

mi aspetterei l'ultima dichiarazione di richiedere un cast esplicito perché, b+=l viene valutata come b = b+l e (b+l) parte dà un numero intero. Il numero intero non può essere assegnato a un byte senza un cast esplicito?

+0

possibile duplicato di [Java + = operatore] (http://stackoverflow.com/questions/8710619/java-operator) – assylias

risposta

17

Bene per cominciare, b+l dà un long, non un int ...

... ma gli operatori di assegnazione composti avere altri comportamenti. Come per JLS section 15.26.2:

Un'espressione assegnazione composta del op modulo E1 = E2 è equivalente a E1 = (T) ((E1) op (E2)), dove T è il tipo di E1, eccetto che E1 viene valutato solo una volta.

Nota il cast a T.

+2

è possibile osservare la differenza quando si scrive manualmente b = b + l; allora vedrai l'errore che vuoi :-) –

+0

Scusa, b + l dà un lungo. E ho bisogno di leggere di più i documenti oracle. Grazie. – PrashanD

Problemi correlati