2016-07-05 3 views
2
int x = 1; 
System.out.println(x++ + x++ * --x); 

Der obige Code druckt "5", aber ich verstehe nicht wie? Ich bekomme für das letzte x immer Null, was dann mit dem zweiten x multipliziert wird, das immer noch 0 ist und dann 2? Bitte helfen Sie!Java Precedence

Antwort

3

Die Art und Weise das Programm Ihre Aussage verarbeitet ist wie folgt:

x = 1; 
1 + (increment x) 2 * (increment x)(decrement x) 2 = 
1 + 2 * 2 = 
1 + 4  = 
5 

Hinzugefügt:

Wenn Sie es bitten, es für Sie zu drucken, anstatt wirklich die Arithmetik zu tun, werden Sie sehen, was die x tatsächlich gleich:

int x = 1; 
    System.out.println(x++ + " + " + x++ + "*" + --x); 

Ausgang: 1 + 2*2

+0

Macht jetzt vollkommen Sinn! Danke @blahfunk! – Matthew

1

Es funktioniert wie folgt:

System.out.println(x++ + x++ * --x); 

Da die ersten beiden sind postfix werden sie erst nach einem Wert durchgeführt werden, ist bereits gesetzt in A 1 in der ersten x setzen dann wird der Wert auf 2 A erhöht. 2 wird in dem zweiten x gesetzt und der Wert auf 3.

System.out.println(1 + 2 * --x); 

erfolgt erhöht wird, bevor Da der --x wird Präfix, das den Betrieb in dem Wert auf die Haftung verbessernde. Daher wäre es gleich 2 und x wäre gleich 2 wieder.

System.out.println(1 + 2 * 2); 

Danach funktioniert es genauso wie es normalerweise in Mathematik (Multiplikation vor Zugabe).

0
public static void main(String[] args) { 

     int x ; 
     x = 1; 

     System.out.println(x++); 
     //1 

     System.out.println(x++ * --x); 
     //2*--3 = 2*2 = 4 

     System.out.println(x++ + (x++ * --x)); 
     //1 + 4 = 5 

     System.out.println(x++ + x++ * --x); 
     //1 + 4 = 5 
    }