2012-11-28 34 views
5

Betrachten Sie diesen Code:Warum benötigt diese Zuweisung keine explizite Umwandlung?

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

ich die letzte Anweisung erwarten würde eine explizite Umwandlung erforderlich ist, weil b+=l als b = b+l und ausgewertet wird (b+l) Teil eine ganze Zahl gibt. Integer kann keinem Byte ohne eine explizite Umwandlung zugewiesen werden?

+0

möglich Duplikat von [Java + = Operator] (http://stackoverflow.com/questions/8710619/java-operator) – assylias

Antwort

17

Nun, mit zu beginnen, gibt b+l ein long, keine int ...

... aber Verbindung Zuweisungsoperator anderes Verhalten haben. Wie pro JLS section 15.26.2:

Verbindung Zuordnung Expression der E1 op form = E2 zu E1 entspricht = (T) ((E1) op (E2)), wobei T ist die Art von E1, außer dass E1 wird nur einmal ausgewertet.

Beachten Sie die Besetzung zu T.

+2

Sie können den Unterschied beobachten, wenn Sie manuell schreiben b = b + l; dann werden Sie den Fehler sehen, den Sie wollen :-) –

+0

Sorry, b + l gibt eine lange. Und ich muss die Oracle-Dokumente mehr lesen. Vielen Dank. – PrashanD

Verwandte Themen