2017-03-13 5 views
-1

Ich habe diese Frage in OCA Fragen gesehen und wissen müssen, warum es 90 gibt und nicht 100. ist hier der Code:Tritt die Förderung vor der Erhöhung in Java auf?

int x = 9; 
long y = x * (long) (++x); 
System.out.println(y); 

Also, was ich denke, das tun würde, ist zum einen Zuwachs x (weil das zuerst passiert, richtig?) und dann würde es die Art Promotion machen und links x nehmen, was 10 ist, es in lang drehen und diese zwei Longs multiplizieren. Recht?

+1

@Guy, sagte er, was es druckt, er will wissen, warum es druckt, was es tut. –

+0

Ich weiß, was gedruckt wird, aber brauche eine Antwort auf warum. – user218046

+0

Ich bin nicht sicher, was das Casting zu lange zu diesem Szenario beiträgt. Sie erhalten das gleiche mit 'int y = x * (++ x)' – khelwood

Antwort

9

Nein. Die Operanden jedes Operators werden von links nach rechts ausgewertet. Daher wird der erste Operand des * Operators, x, vor dem zweiten Operanden (long) (++x) ausgewertet. Deshalb wird 9 mit 10 multipliziert.

+0

Ein Beispiel dafür, wo die Priorität nicht der Reihenfolge der Auswertung entspricht. +1 –

+0

@Eran, Also im Grunde, wenn Java Variable in Betrieb sieht - es versucht, seine Werte zu erhalten und schreiben in Betrieb richtig? von links nach rechts. OK. Ich verstehe jetzt. Danke mein Herr. – user218046

Verwandte Themen