Postinkrement und println - Verständnisproblem

CodeIsland

Mitglied
Hallo!

Ich schreibe bald Klausur und hänge schon ewig an dieser einen Übungsaufgabe mit den Inkrementoperatoren. Kann mir jemand sagen, wo mein Denkfehler ist? Danke im Voraus!

Java:
        int b = 2;
	b = b++;
	System.out.println(b);//Ich denke Ausgabe ist 3, Wert von b wird durch b++ um 1 erhöht 
und mit der nächsten Ausgabe in println auch auf 3 gesetzt ausgegeben -> aber nein -> Ausgabe ist 2!
	System.out.println(++b);////Ich denke Ausgabe ist 4, denn jetzt wird der vorherige Wert 
sofort erhöht -> aber nein -> Ausgabe ist 3!
 

Gucky

Top Contributor
Bei der ersten Aufgabe wird zuerst b auf den Stack gelegt. Dann wird b noch einmal auf den Stack gelegt und der der zuletzt auf den Stack gelegte Wert wird mit dem davor überschrieben. Dann wird der Wert davor inkrementiert, aber das ist egal, weil der verfällt. Oder so ähnlich. Die Begründung ist nicht richtig aber so ähnlich ist es.

Der vorige Wert wird sofort erhöht. Der ist aber 2 ;)


Dies ist der Bytecode dazu. Vielleicht hilft dir das etwas:

Java:
  private void operatorenTest();
    Code:
       0: iconst_2      
       1: istore_1      
       2: iload_1       
       3: iinc          1, 1
       6: istore_1      
       7: getstatic     #74                 // Field java/lang/System.out:Ljava/io/PrintStream;
      10: iload_1       
      11: invokevirtual #113                // Method java/io/PrintStream.println:(I)V
      14: return
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
////Ich denke Ausgabe ist 4, denn jetzt wird der vorherige Wert sofort erhöht -> aber nein -> Ausgabe ist 3!

Das ist nur ein Folgefehler. In diesem Fall hast du natürlich recht mit deiner Beschreibung: Der Wert von "b" wird sofort erhöht, es kommt aber 3 raus da der Ausgangswert nur 2 war und nicht 3.

Zu der Zeile "b = b++;" gibt es hier teilweise Erklärungen Post increment and the assignment operator (Java in General forum at JavaRanch)
Welche davon wirklich die richtige ist kann ich dir leider nicht genau sagen.
 

CSHW89

Bekanntes Mitglied
Also Pre- sowie Postinkrement erhöht den Wert der Variable immer um 1. Der Unterschied liegt darin, welcher Wert aus dieser Operation hervorgeht. Hier mal ein hoffentlich etwas verständlicheres Beispiel:
Java:
a = 3
b = 3
c = ++a
d = b++
Also a und b sind zunächst gleich 3. Nun wird a durch "++a" auf 4 erhöht. Der Wert der Operation, also das was danach in c gespeichert wird, ist auch 4. Der Postinkrement-Operator arbeitet aber anders. Zunächst erhöht er den Wert von b auch auf 4. Der Wert der Operation, also das was danach in d gespeichert wird, ist aber der vorherige Wert nämlich 3. Somit ist am Ende a = b = c = 4 und d = 3.
Ob also "++x" oder "x++" berechnet wird, spielt für die Variable x erstmal keine Rolle. Es kommt drauf an, was man mit dieser Operation weiterhin macht, also ob man den Wert dieser Operation in einer Variablen speichert.

Nun zu deinem Beispiel. Die Variable b ist am Anfang 2. Dann wird sie mit "b++" um eins erhöht. Das heißt für diesen kurzen Moment hat sie den Wert 3. Der Wert des Postinkrements ist aber der alte Wert 2 und wird danach in die Variable b gespeichert. Also ist die erste Ausgabe 2. In der letzten Zeile wird b mit "++b" um eins erhöht. Also hat b den Wert 3. Da nicht b ausgegeben wird, sondern "++b" muss man hier nochmal kurz drüber nachdenken. Da es hier aber um den Preinkrement-Operator handelt, stimmt der Wert, der ausgeben wird, mit dem von b überein, also 3.
Wenn die letzte Zeile stattdessen "System.out.println(b++);" gelauten hätte, wäre die zweite Ausgabe wieder 2 gewesen, auch wenn b danach den Wert 3 gehabt hätte.

lg Kevin
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
b = 3
d = b++
Also a und b sind zunächst gleich 3. Nun wird a durch "++a" auf 4 erhöht. Der Wert der Operation, also das was danach in c gespeichert wird, ist auch 4. Der Postinkrement-Operator arbeitet aber anders. Zunächst erhöht er den Wert von b auch auf 4. Der Wert der Operation, also das was danach in d gespeichert wird, ist aber der vorherige Wert nämlich 3. Somit ist am Ende a = b = c = 4 und d = 3.
Ob also "++x" oder "x++" berechnet wird, spielt für die Variable x erstmal keine Rolle. Es kommt drauf an, was man mit dieser Operation weiterhin macht, also ob man den Wert dieser Operation in einer Variablen speichert.

Die Erklärung stimmt zwar aber dein Beispiel entspricht nicht ganz dem des TO. Daher erklärt es nicht ganz das Verhalten des Beispiels vom TO
Er weist der Variable die inkrementiert wird sich selber zu! => "b = b++;"

Habe mich gerade erkundigt:

b = 3;
Bei dem Code "b = b++;" wird zuerst evaluiert welcher Wert "b" zugewiesen werden soll.
In diesem Fall ist der evaluierte Wert "3", dann wird b inkrementiert und hat den Wert 4. Erst dann passiert die Zuweisung des evaluierten Wertes "3" wird "b" zugewiesen

=> daher hat "b" nun den Wert "3"


Kurz zusammengefasst: Das Inkrement wird zwischen Evaluierung und Zuweisung durchgeführt und geht daher "verloren"
 
Zuletzt bearbeitet:

CSHW89

Bekanntes Mitglied
Hast du mein kompletten Post überhaupt gelesen? Ich wollte in einem anderen Beispiel erstmal auf den Unterschied zwischen Pre und Postink. hinweisen. Da hab ich im übrigen auch schon erwähnt, in welcher Reihenfolge die Auswertung stattfindet. Im zweiten Abschnitt geh ich doch auf das Beispiel des TO ein.
 

Joose

Top Contributor
Hast du mein kompletten Post überhaupt gelesen?

Ja habe ich. Aber wahrscheinlich wichtige Teile fälschlicher Weise ausgeblendet ;)

Ich wollte in einem anderen Beispiel erstmal auf den Unterschied zwischen Pre und Postink. hinweisen. Da hab ich im übrigen auch schon erwähnt, in welcher Reihenfolge die Auswertung stattfindet. Im zweiten Abschnitt geh ich doch auf das Beispiel des TO ein.

Jetzt seh ichs auch, komisch das es mir vorhin anders vorkam :bahnhof:
 

fLooojava

Bekanntes Mitglied
Falls du weitere Fragen hast kannst du gerne fragen, ich vermute stark du meinst die EIP Klausur oder? ;)

Ahja, die Erläuterung von CSHW89 bringt's genau auf den Punkt - alles korrekt, genau so wurde es auch in der Vorlesung formuliert.

cheers
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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 Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
D System.out.println Java Basics - Anfänger-Themen 1
H Print und Println Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
T System.out.println() Java Basics - Anfänger-Themen 5
L Input/Output Println wird doppelt ausgeführt Java Basics - Anfänger-Themen 11
R Input/Output Frage zu System.out.println Java Basics - Anfänger-Themen 5
JavaTalksToMe Erste Schritte Println-Frage (Verständnisfrage) Java Basics - Anfänger-Themen 1
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
V System.out.println zu JTextArea Java Basics - Anfänger-Themen 6
V OOP System.out.println(Objekt) Java Basics - Anfänger-Themen 3
D int x in System.out.println(), aber wie? Java Basics - Anfänger-Themen 1
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
W Erste Schritte Methode für println unnötig? Java Basics - Anfänger-Themen 6
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
V Erste Schritte println(); Java Basics - Anfänger-Themen 6
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
D system.out.println >> JTextArea Java Basics - Anfänger-Themen 1
O Frage zu System.out.println() Java Basics - Anfänger-Themen 1
A System.out.println() - Aufbau Java Basics - Anfänger-Themen 1
D Compiler-Fehler kurze Frage (Fehler): runde Klammern im Println Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
J Umgang mit System.out.println() und .print() Java Basics - Anfänger-Themen 6
G classname.System.out.println(); ? Java Basics - Anfänger-Themen 2
O If in System.out.println Java Basics - Anfänger-Themen 11
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
C System.out.println Java Basics - Anfänger-Themen 4
D println von excel $A$1 Java Basics - Anfänger-Themen 3
Binary.Coder Array über println ausgeben Java Basics - Anfänger-Themen 18
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
D Frage zu System.out.println() Funktion Java Basics - Anfänger-Themen 6
I Zuerst "System.out.println" Java Basics - Anfänger-Themen 3
K Problem bei Ausgabe mit println Java Basics - Anfänger-Themen 19
T Jar-Archive kein System.out.println()?? Java Basics - Anfänger-Themen 5
S Einfaches int Array gibt über System.out.println merkwürden Wert aus Java Basics - Anfänger-Themen 9
K println - Klammern von Operationen Java Basics - Anfänger-Themen 4
H toString / println Java Basics - Anfänger-Themen 2
K println schreibt nichts auf das Display Java Basics - Anfänger-Themen 3
K Methode System.out.println() Java Basics - Anfänger-Themen 4
S System.out.println gibt diesen Wert aus: Klasse@f102d3 Java Basics - Anfänger-Themen 3
N frage zu println() Java Basics - Anfänger-Themen 6
G Ist println eine Funktion? Java Basics - Anfänger-Themen 10
L Text zentrieren, println Java Basics - Anfänger-Themen 7
J System.out.println(. + (found ? "" : "k" Java Basics - Anfänger-Themen 8
G Tabulator in println Java Basics - Anfänger-Themen 2
C Wie funktioniert System.out.println intern? Java Basics - Anfänger-Themen 3
A System.out.println() lesen Java Basics - Anfänger-Themen 3
L System.out.println() Java Basics - Anfänger-Themen 4
S Schöne Tabelle mit println() anlegen Java Basics - Anfänger-Themen 3
L PrintWriter autoflush: println funktioniert, print nicht Java Basics - Anfänger-Themen 3
R System.out.println wird nicht angezeigt Java Basics - Anfänger-Themen 3
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
G Out.println oder System.out.println Java Basics - Anfänger-Themen 25
M Wo liegt der Quelltext von System.out.println() Java Basics - Anfänger-Themen 3
T System.out.println - Compiler-Fehler Java Basics - Anfänger-Themen 22
C System.out.print oder println ? Java Basics - Anfänger-Themen 2
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

Ähnliche Java Themen

Neue Themen


Oben