2012-09-21 17 views
9

Ein Kollege von mir fragte mich diese Frage und ich bin irgendwie verwirrt.Int zu Kurz hinzufügen

int i = 123456; 
short x = 12; 

Die Aussage

x += i; 

Fein Kompiliert jedoch

x = x + i; 

nicht

Was Java hier tut?

+0

Sie versuchen Int jedoch zu kurz hinzuzufügen. a = b! = b = a –

+0

Sie fügen tatsächlich einen int zu einem kurzen –

+3

hinzu Für Interesse versuchen Sie dieses 'char ch = '0'; ch * = 1.2; 'jetzt ch ist' '8'';) –

Antwort

15
int i = 123456; 
short x = 12; 
x += i; 

ist eigentlich

int i = 123456; 
short x = 12; 
x = (short)(x + i); 

Während x = x + i einfach x = x + i ist. Es wird nicht automatisch als short umgewandelt und verursacht daher den Fehler (x + i ist vom Typ int).


Verbindung Zuweisungsausdruck von der Form E1 op= E2 entspricht E1 = (T)((E1) op (E2)), wobei die Art der TE1 ist, mit der Ausnahme, dass E1 nur einmal ausgewertet wird.

- JLS §15.26.2

2

Nummern werden wie int behandelt, es sei denn, Sie werden anders angegeben. Wenn Sie also in der zweiten Anweisung eine Literalnummer anstelle einer Variablen verwenden, wird sie nicht automatisch in den entsprechenden Typ umgewandelt.

x = x + (short)1; 

... sollte funktionieren.

+0

Ich habe falsche Gleichung geschrieben. Ich habe meine Frage aktualisiert. Sieh 'x = x + i'. –

+0

Ok, warum nicht x = x + x; Arbeit? Das Problem liegt nicht auf der Zahl 1, sondern auf dem Operator +, der einen int zurückgibt. – lleite

1

Der + Betreiber von integralen Typen (int, short, char und Byte) gibt immer einen int als Ergebnis.

Sie, dass mit diesem Code sehen:

//char x = 0; 
//short x = 0; 
//byte x = 0; 
int x = 0; 
x = x + x; 

Es wird nicht kompiliert, es sei denn x ein int ist.