... und Upvoting der ersten der identischen Antworten, um
einzusteigen
9
Um am schnellsten die Beute zu finden, sortiere nach der ältesten, klicke auf upvote. ohowoho.
Dotjoe
1
Ich war mir sicher, dass ich es hatte! Emils Antwort ist sowieso besser.
Victor
Antworten:
290
++ x heißt Vorinkrement, während x ++ Nachinkrement heißt.
int x =5, y =5;System.out.println(++x);// outputs 6System.out.println(x);// outputs 6System.out.println(y++);// outputs 5System.out.println(y);// outputs 6
+1 Viele Beispiele, dies ist eine Erklärung mit Beispielen :)
Jeremy Smyth
1
Ja, ich habe dieses auch wegen der klaren Erklärung der Prosa am Anfang positiv bewertet. (Hmm, wusste nicht, dass man heutzutage in Kommentaren kursiv
schreiben
17
Diese werden als Postfix- und Präfixoperatoren bezeichnet. Beide addieren 1 zur Variablen, aber es gibt einen Unterschied im Ergebnis der Anweisung.
int x =0;int y =0;
y =++x;// result: y=1, x=1int x =0;int y =0;
y = x++;// result: y=0, x=1
@ Tom, ich habe gerade darüber nachgedacht, wie ich meine Stimmen abgeben soll. Hier ist meine Interpretation: Ein kleiner Grund, die Antwort von Emil H zu bevorzugen, ist, dass sein Beispielcode / etwas / informativer ist.
Jonik
Jonik. True, enthält auch die Schlüsselwörter "Preincrement" und "Postincrement".
Tom
Diese "Antwort" sagt Ihnen nur eine Testfallausgabe, und ich denke, dass Ausgaben keine Antworten sind. Im Gegenteil, normalerweise führt das (unerwartete) Ergebnis einer Codeausführung zu der Frage. Daher meine Abwahl.
Alberto de Paola
8
Ich bin hier von einem der letzten Dups gelandet , und obwohl diese Frage mehr als beantwortet ist, konnte ich nicht anders, als den Code zu dekompilieren und "noch eine andere Antwort" hinzuzufügen :-)
Um genau zu sein (und wahrscheinlich ein bisschen pedantisch),
int y =2;
y = y++;
wird zusammengestellt in:
int y =2;int tmp = y;
y = y+1;
y = tmp;
Wenn Sie javacdiese Y.javaKlasse:
publicclass Y {publicstaticvoid main(String[]args){int y =2;
y = y++;}}
und javap -c YSie erhalten den folgenden JVM-Code (ich habe mir erlaubt, die Hauptmethode mithilfe der Java Virtual Machine-Spezifikation zu kommentieren ):
publicclass Y extends java.lang.Object{public Y();Code:0: aload_0
1: invokespecial #1;//Method java/lang/Object."<init>":()V4:returnpublicstaticvoid main(java.lang.String[]);Code:0: iconst_2 // Push int constant `2` onto the operand stack. 1: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.2: iload_1 // Push the value (`2`) of the local variable at index `1` (`y`)// onto the operand stack3: iinc 1,1// Sign-extend the constant value `1` to an int, and increment// by this amount the local variable at index `1` (`y`)6: istore_1 // Pop the value on top of the operand stack (`2`) and set the// value of the local variable at index `1` (`y`) to this value.7:return}
In Java gibt es einen Unterschied zwischen x ++ und ++ x
++ x ist eine Präfixform:
Sie erhöht den Variablenausdruck und verwendet dann den neuen Wert im Ausdruck.
Zum Beispiel, wenn im Code verwendet:
int x =3;int y =++x;//Using ++x in the above is a two step operation.//The first operation is to increment x, so x = 1 + 3 = 4//The second operation is y = x so y = 4System.out.println(y);//It will print out '4'System.out.println(x);//It will print out '4'
x ++ ist eine Postfix-Form:
Der Variablenwert wird zuerst im Ausdruck verwendet und dann nach der Operation inkrementiert.
Zum Beispiel, wenn im Code verwendet:
int x =3;int y = x++;//Using x++ in the above is a two step operation.//The first operation is y = x so y = 3//The second operation is to increment x, so x = 1 + 3 = 4System.out.println(y);//It will print out '3'System.out.println(x);//It will print out '4'
Hoffe das ist klar. Das Ausführen und Spielen mit dem obigen Code sollte Ihr Verständnis verbessern.
Ja, bei Verwendung von ++ X wird X + 1 im Ausdruck verwendet. Bei Verwendung von X ++ wird X im Ausdruck verwendet und X wird erst erhöht, nachdem der Ausdruck ausgewertet wurde.
Wenn also X = 9 ist und ++ X verwendet, wird der Wert 10 verwendet, andernfalls der Wert 9.
Ja, der zurückgegebene Wert ist der Wert nach bzw. vor der Inkrementierung.
classFoo{publicstaticvoid main(String args[]){int x =1;int a = x++;System.out.println("a is now "+ a);
x =1;
a =++x;System.out.println("a is now "+ a);}}
$ java Foo
a is now 1
a is now 2
OK, ich bin hier gelandet, weil ich kürzlich beim Überprüfen der klassischen Stack-Implementierung auf dasselbe Problem gestoßen bin. Nur eine Erinnerung daran, dass dies in der Array-basierten Implementierung von Stack verwendet wird, die etwas schneller ist als die mit verknüpften Listen.
Code unten, überprüfen Sie die Push- und Pop-Funktion.
publicclassFixedCapacityStackOfStrings{privateString[] s;privateint N=0;publicFixedCapacityStackOfStrings(int capacity){ s =newString[capacity];}publicboolean isEmpty(){return N ==0;}publicvoid push(String item){ s[N++]= item;}publicString pop(){String item = s[--N];
s[N]=null;return item;}}
Ja, es gibt einen Unterschied, falls x ++ (Nachinkrementierung), der Wert von x im Ausdruck verwendet wird und x nach Auswertung des Ausdrucks um 1 erhöht wird, andererseits ++ x (Vorinkrementierung), x + 1 wird im Ausdruck verwendet. Nehmen Sie ein Beispiel:
publicstaticvoid main(String args[]){int i , j , k =0;
j = k++;// Value of j is 0
i =++j;// Value of i becomes 1
k = i++;// Value of k is 1System.out.println(k);}
Die Frage ist bereits beantwortet, aber ich kann sie auch von meiner Seite hinzufügen.
Zuallererst bedeutet ++ Inkrementieren um eins und - Dekrementieren um eins.
Jetzt bedeutet x ++ Inkrement x nach dieser Zeile und ++ x bedeutet Inkrement x vor dieser Zeile.
Überprüfen Sie dieses Beispiel
classExample{publicstaticvoid main (String args[]){int x=17,a,b;
a=x++;
b=++x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);
a = x--;
b =--x;System.out.println(“x=”+ x +“a=”+a);System.out.println(“x=”+ x +“b=”+b);}}
Diese Antwort wäre noch besser, wenn sie von ein paar erklärenden Worten begleitet würde.
Thom
0
In i ++ heißt es Nachinkrementierung, und der Wert wird in jedem Kontext verwendet, der dann inkrementiert wird. ++ i Inkrementieren erhöht zuerst den Wert und verwendet ihn dann im Kontext.
Wenn Sie es in keinem Kontext verwenden, spielt es keine Rolle, was Sie verwenden, aber die Nachinkrementierung wird gemäß Konvention verwendet.
Antworten:
++ x heißt Vorinkrement, während x ++ Nachinkrement heißt.
quelle
Ja
++ x erhöht den Wert von x und gibt dann x zurück.
x ++ gibt den Wert von x zurück und erhöht dann
Beispiel:
Nachdem der Code ausgeführt wurde, sind sowohl a als auch b 1, aber x ist 2.
quelle
Diese werden als Postfix- und Präfixoperatoren bezeichnet. Beide addieren 1 zur Variablen, aber es gibt einen Unterschied im Ergebnis der Anweisung.
quelle
suffix
?Ja,
druckt
6
undwird gedruckt
5
.quelle
Ich bin hier von einem der letzten Dups gelandet , und obwohl diese Frage mehr als beantwortet ist, konnte ich nicht anders, als den Code zu dekompilieren und "noch eine andere Antwort" hinzuzufügen :-)
Um genau zu sein (und wahrscheinlich ein bisschen pedantisch),
wird zusammengestellt in:
Wenn Sie
javac
dieseY.java
Klasse:und
javap -c Y
Sie erhalten den folgenden JVM-Code (ich habe mir erlaubt, die Hauptmethode mithilfe der Java Virtual Machine-Spezifikation zu kommentieren ):Somit haben wir endlich:
quelle
Wenn man bedenkt, was der Computer tatsächlich tut ...
++ x: x aus dem Speicher laden, inkrementieren, verwenden, zurück in den Speicher speichern.
x ++: lade x aus dem Speicher, benutze, inkrementiere, speichere zurück in den Speicher.
Betrachten Sie: a = 0 x = f (a ++) y = f (++ a)
wobei die Funktion f (p) p + 1 zurückgibt
x ist 1 (oder 2)
y wird 2 (oder 1) sein
Und darin liegt das Problem. Hat der Autor des Compilers den Parameter nach dem Abrufen, nach der Verwendung oder nach dem Speichern übergeben?
Verwenden Sie im Allgemeinen einfach x = x + 1. Es ist viel einfacher.
quelle
In Java gibt es einen Unterschied zwischen x ++ und ++ x
++ x ist eine Präfixform: Sie erhöht den Variablenausdruck und verwendet dann den neuen Wert im Ausdruck.
Zum Beispiel, wenn im Code verwendet:
x ++ ist eine Postfix-Form: Der Variablenwert wird zuerst im Ausdruck verwendet und dann nach der Operation inkrementiert.
Zum Beispiel, wenn im Code verwendet:
Hoffe das ist klar. Das Ausführen und Spielen mit dem obigen Code sollte Ihr Verständnis verbessern.
quelle
Ja.
quelle
Ja, bei Verwendung von ++ X wird X + 1 im Ausdruck verwendet. Bei Verwendung von X ++ wird X im Ausdruck verwendet und X wird erst erhöht, nachdem der Ausdruck ausgewertet wurde.
Wenn also X = 9 ist und ++ X verwendet, wird der Wert 10 verwendet, andernfalls der Wert 9.
quelle
Wenn es wie viele andere Sprachen ist, möchten Sie vielleicht einen einfachen Versuch machen:
Wenn das oben genannte nicht so passiert, können sie gleichwertig sein
quelle
Ja, der zurückgegebene Wert ist der Wert nach bzw. vor der Inkrementierung.
quelle
OK, ich bin hier gelandet, weil ich kürzlich beim Überprüfen der klassischen Stack-Implementierung auf dasselbe Problem gestoßen bin. Nur eine Erinnerung daran, dass dies in der Array-basierten Implementierung von Stack verwendet wird, die etwas schneller ist als die mit verknüpften Listen.
Code unten, überprüfen Sie die Push- und Pop-Funktion.
quelle
Ja, es gibt einen Unterschied, falls x ++ (Nachinkrementierung), der Wert von x im Ausdruck verwendet wird und x nach Auswertung des Ausdrucks um 1 erhöht wird, andererseits ++ x (Vorinkrementierung), x + 1 wird im Ausdruck verwendet. Nehmen Sie ein Beispiel:
quelle
Die Frage ist bereits beantwortet, aber ich kann sie auch von meiner Seite hinzufügen.
Zuallererst bedeutet ++ Inkrementieren um eins und - Dekrementieren um eins.
Jetzt bedeutet x ++ Inkrement x nach dieser Zeile und ++ x bedeutet Inkrement x vor dieser Zeile.
Überprüfen Sie dieses Beispiel
Es wird die folgende Ausgabe geben:
quelle
In i ++ heißt es Nachinkrementierung, und der Wert wird in jedem Kontext verwendet, der dann inkrementiert wird. ++ i Inkrementieren erhöht zuerst den Wert und verwendet ihn dann im Kontext.
Wenn Sie es in keinem Kontext verwenden, spielt es keine Rolle, was Sie verwenden, aber die Nachinkrementierung wird gemäß Konvention verwendet.
quelle
Es gibt einen großen Unterschied.
Da die meisten Antworten bereits auf die Theorie hingewiesen haben, möchte ich ein einfaches Beispiel nennen:
Nun wollen wir sehen
++x
:quelle