Postinkrement-Verständnisproblem

aha!

Mitglied
Guten Abend zusammen,

ich spiele hier gerade ein wenig mit post- und pre- inkrement und dekrement rum.
Soweit eigentlich alles klar. Nur habe ich jetzt folgendes Verständnis-Problem.
Sei mal folgendes gegeben:

Java:
public class Test {
	public static void main(String[] args) {
		int a = 5;
		System.out.println(a); // 5
		a=a++;
		System.out.println(a); // 5

		int b = 5;
		System.out.println(b); // 5
		b++;
		System.out.println(b); // 6 ??
	}
}

a=a++ ist klar. Der Wert 5 wird dem a zugewiesen. a würde erst bei der nächstem Aufruf 6 sein.
b erhält den Wert 5. Dann folgt b++. Also sollte doch b bei nächster Verarbeitung erst um eins inkrementiert werden, oder nicht? Warum erhalte ich bei der drittletzten Zeile dann doch eine 6?

Oder besser gefragt: Worin unterscheidet sich "x=x++" mit "x++"?

Ich glaub' ich steh grad mächtig auf dem Schlauch :-/
 
Also ein a++ wird eigentlich in ein a = a + 1 übersetzt.

Und bei einem a = a++ wird wohl erst der aktuelle Wert von a dem a zugewiesen ( bleibt also gleich ) und danach wird der Wert von a um eins erhöht. Würde ich sagen.
 
Guten Abend zusammen,

inkrementiert werden, oder nicht? Warum erhalte ich bei der drittletzten Zeile dann doch eine 6?

Oder besser gefragt: Worin unterscheidet sich "x=x++" mit "x++"?

Weil b da schon verwendet wurde, effektiv steht in deinem Code sowas wie

b = b +1;

Schreib mal
Java:
int b = 5;
System.out.println(b++);
System.out.println(b);
 
Also ein a++ wird eigentlich in ein a = a + 1 übersetzt.

Und bei einem a = a++ wird wohl erst der aktuelle Wert von a dem a zugewiesen ( bleibt also gleich ) und danach wird der Wert von a um eins erhöht. Würde ich sagen.

Danke für die schnelle Antwort erstmal 🙂
wenn a++ das gleiche ist wie a=a+1, dann würde sich ja a sofort(!) um 1 erhöhen. Quasi noch in der selben Zeile. Aber hier wird ja postinkrementiert.
 
Danke für die schnelle Antwort erstmal 🙂
wenn a++ das gleiche ist wie a=a+1, dann würde sich ja a sofort(!) um 1 erhöhen. Quasi noch in der selben Zeile. Aber hier wird ja postinkrementiert.

probier Folgendes
Java:
        int a = 5;
        System.out.println(a); // 5
        a=a++;
        System.out.println(a); // 5
        System.out.println(a); // ?
 
Weil b da schon verwendet wurde, effektiv steht in deinem Code sowas wie

b = b +1;

Schreib mal
Java:
int b = 5;
System.out.println(b++);
System.out.println(b);

Eben. Das war auch mein Gedanke. b wird in deinem Beispiel auch in der dritten Zeile "verwendet", also um 1 erhöht und ausgegeben. Aber dann müsste der selbe Effekt in meiner Zeile 6 auch geschehen, oder nicht?
 
Aber dann müsste der selbe Effekt in meiner Zeile 6 auch geschehen, oder nicht?

Nein, siehe Post von eRaaa....

Falls du damit noch Schwierigkeiten hast, die passende Passage von Sun zu dem Thema findet sich
unter Expressions

Wichtig ist folgender Satz:

The value of the postfix increment expression is the value of the variable before the new
value is stored.
 
Zuletzt bearbeitet:
Java:
a=a++;

a wird sich intern gemerkt. Es passiert also folgendes
1) merke dir den Wert des a auf der rechten Seite = 5;
2) inkrementiere das a auf der rechten Seite
3) setze a = den gemerkten Wert

Dadurch ändert sich nichts und a bleibt bei 5

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 2.5 Ausdrücke, Operanden und Operatoren

(bisschen scrollen zu Einige Kuriositäten )


bei 2) "erkennt" Java quasi, dass das a in der selben Zeile "verwendet" wird (Zuweisung) und inkrementiert. Anschließend wird aber der ursprüngliche Wert auf a gesetzt.
Logisch eigentlich, weil die Erkennung ja immer vor der Rechnung kommt. Wie bei println ja auch.

Dickes Brot! Aber ich hab's verstanden.
Ich danke vielmals!!
 
Zuletzt bearbeitet:
Über Sinn und Unsinn kann man sich streiten. Es bringt keinen echten Vorteil, aber die gravierenden Nachteile geringerer Übersichtlichkeit und potentieller Verwirrung und Unsicherheit, was genau dort passiert.
 

Neue Themen


Zurück
Oben