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:
publicclassTest{publicstaticvoidmain(String[] args){int a =5;System.out.println(a);// 5
a=a++;System.out.println(a);// 5int 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.
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.
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
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.
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?
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
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!!
Ü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.