2012-04-02 13 views
0
public class I { 
     public static void main(String args[]) 
     { 
      int i=0,j=1,k=2; 
      i=i++ - --j + ++k; 
      System.out.println("\ni : "+i+"\nj : "+j+"\nk : "+k); 
     } 
    } 

Kann jemand mir bitte erklären, warum der obige Code Ausgang gibt:Komplizierte Expression Java

i : 3 
j : 0 
k : 3 

Statt den Ausgang des Gebens:

i : 4 
j : 0 
k : 3 

?

+0

Verstanden ... Vielen Dank für die Antwort. – Kameron

Antwort

3
  1. i ++ - gibt 0 (und Inkremente i)
  2. --j dekrementiert und gibt 0
  3. ++ k inkrementiert und gibt 3
  4. das Ergebnis 0 + 0 + 3 ist mit i zugewiesen (das überschreibt is Wert 1).

Deshalb: i: 3.

1

Ich bin Ihre Verwirrung zu raten hängt von der Verwendung von i++ - aber die Nebenwirkung von i++i Inkrementieren hat keine Auswirkung, da i das Ergebnis der "neu zugewiesen komplizierter Ausdruck ".

1

Hier ist, was die fragliche Zeile erzeugt, dass Denken Sie daran, wenn i 0 ist, dann i++ == 0 und ++i == 1

i = i++ - --j + ++k; 
i = (0) - (-0) + (3) // i is 3 
1

wegen der Differenz zwischen Post Schritt und vor Schritt Operatoren Dies ist.

Pre-Inkrement kommt vor der Variable (z. B. ++i) und Post-Inkrement kommt nach der Variable (z. B. i++).

brechen in kleinere Teile nach unten:

i++ // post increment means increment AFTER we evaluate it 
     // expression evaluates to 0, then increment i by 1 

--j // pre decrement means decrement BEFORE evaluation 
     // j becomes 0, expression evaluates to 0 

++k // pre increment means increment BEFORE evaluation 
     // k becomes 3, expression evaluates to 3 

So, jetzt haben wir:

i = 0 - 0 + 3 // even though i was set to 1, we reassign it here, so it's now 3 
1
  1. i ++ gibt 0 und i wird dann 1
  2. --j j 0 geworden macht und ergibt dann 0, plus 0 aus Schritt 1 ergibt 0
  3. ++ k macht k 3 und ergibt dann 3, plus 0 aus Schritt 2 ergibt 3 Wird, die in i Daher

gespeichert ist, i 3 ist, j 0 ist und k 3

1

Der Wert von i ist 3 weil der Ausdruck so ausgewertet wird:

i++ //still equals 0 since it's incremented after the evaluation 
- 
--j // equals 0 too since it's decremented is done before the evaluation 
+ 
++k // equals 3 since it's incremented before the evaluation