public class Test {
public static void main(String[] args) {
int x = 10;
int y = ++x + x++ + ++x;
System.out.println(y);
}
}
Wie man vielleicht auf den ersten Blick schon erkennt, geht es hier um die Behandlung von ++x sowie x++, also das Inkrementieren eines Wertes und den exakten Zeitpunkt, wann genau das stattfindet.
Lass uns das zunächst mal etwas besser aufschreiben, damit das auch deutlich wird:
int y = (++x) + (x++) + (++x);
Dabei kann man sich folgendes merken:
++x: Der Wert wird VOR dem Zugriff um 1 erhöht
x++: Der Wert wird NACH dem Zugriff um 1 erhöht
Dann gehen wir die Aufgabe mal der Reihe nach durch:
int y = ++x
Gemäß unseres Merksatzes wird also x VOR dem Zugriff um 1 erhöht was bedeutet, dass x an dieser Stelle den Wert 11 hat.
int y = ++x +
Hier ist ein ganz normaler Operator um die einzelnen Ergebnisse zu addieren
int y = ++x + x++
x++ bedeutet nach unserem Merksatz, dass der Wert von x erst NACH dem Zugriff um 1 erhöht wird, also hat x zu diesem Zeitpunkt noch den Wert 11.
int y = ++x + x++ +
Hier ist wieder ein normaler Operator um die einzelnen Ergebnisse zu addieren
int y = ++x + x++ + ++x
Das ist nun der tricky Teil: x wird hier VOR dem Zugriff um 1 erhöht, erhält aber durch den Vorgänger (NACH dem Zugriff) noch ein plus 1, sodass x hier den Wert 13 hat! (12 wegen der Erhöhung vorher, 13 wegen der Erhöhung VOR diesem Zugriff).
Dadurch ergibt sich: int y = 11 + 11 + 13 welches in Summe dann 35 ergibt.
Die richtige Lösung lautet also C.
Dies ist ein schönes Beispiel um sich das Thema gut merken zu können und ich bin mir sicher, wenn man das einmal raus hat, ist es auch gar nicht mehr so schwer.
Wie fandest du die Aufgabe? Hast du auf den ersten Blick die richtige Lösung gefunden oder hast du die Step-by-Step Lösung benötigt?