2010-03-04 8 views

Antwort

14

i++ ist ein Postinkrement (JLS 15.14.2). Es erhöht i, aber das Ergebnis des Ausdrucks ist der Wert ivor das Inkrement. Wird dieser Wert auf i zurückgesetzt, bleibt der Wert i unverändert.

int i = 0; 
int j = i++; 

Es ist leicht einzusehen, warum j == 0 in diesem Fall:

es wie folgt zusammenbrechen. Anstelle von j ersetzen wir die linke Seite durch i. Der Wert auf der rechten Seite ist immer noch 0, und deshalb erhalten Sie i == 0 in Ihrem Snippet.

4

Sie bedeutete dies zu tun:

int i = 0; 
i++; 
i++; 
i++; 
System.out.println(i); 

i++ tatsächlich einen Auftrag tut so, wenn Sie einen = fügen Sie nur die Dinge verwirren. Diese anderen feinen Responder können Ihnen das Wesentliche geben, einige Details davon entgehen mir. :)

0

Das erste, was ist, dass Sie diese Art von Code nicht schreiben sollte ....

Aber wenn wir die Fragen willen dann diese einfache betrachten: Es hat mit der Art und Weise der Postfix-Operator „Erträge“ zu tun der Wert. Ein Postfix hat Vorrang vor dem Zuweisungsoperator, aber der Postfixoperator nach Inkrementieren des Werts von i gibt den vorherigen Wert von i zurück. Also werde ich wieder seinem vorherigen Wert zugewiesen.

Und noch einmal verwenden Sie dieses Konstrukt nicht als nächste Programmierer in Ihrem Code, der dies, nachdem Sie kommen sieht (mit etwas Großem in seinen Händen) :)

0

Lassen I=++, eine Steigerung, und A=i, eine Zuweisung. Sie sind nicht kommutativ: IA != AI.

Zusammenfassung

IA = "first increase then assignment"

Counter-Beispiel

$ javac Increment.java 
$ java Increment 
3 
$ cat Increment.java 
import java.util.*; 
import java.io.*; 

public class Increment { 
    public static void main(String[] args) { 
     int i=0; 
     i=++i; 
     i=++i; 
     i=++i; 
     System.out.println(i); 
    } 
} 

Verwandte

Verwandte Themen