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 :-/
 

Lexi

Bekanntes Mitglied
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.
 

ThreadPool

Bekanntes Mitglied
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);
 

aha!

Mitglied
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.
 

ThreadPool

Bekanntes Mitglied
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); // ?
 

aha!

Mitglied
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?
 

ThreadPool

Bekanntes Mitglied
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:

aha!

Mitglied
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:

Marco13

Top Contributor
Ü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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
B Postinkrement Zuweisung Java Basics - Anfänger-Themen 1
S Frage zu While Schleife mit Pre- und Postinkrement Java Basics - Anfänger-Themen 4
J Prä- und Postinkrement Java Basics - Anfänger-Themen 19
A Kleines GIT-Verständnisproblem zwischen zwei Rechnern Java Basics - Anfänger-Themen 6
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
nonickatall Grundsätzliches Verständnisproblem des Aufbaus eines Programms Java Basics - Anfänger-Themen 19
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
M Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator Java Basics - Anfänger-Themen 8
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
1 Verständnisproblem mit Foreach Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben