Erklärung war prinzipiell richtig, aber beim Schreiben hatte ich das falsch herum im Kopf. Der Pre Operator ist das — also wird da I reduziert und die 0 genommen. Es geht also um max(1,0) was 1 ist.
Edit: Bitte die folgende Antwort anschauen für bessere / richtige Erklärung.
Ok, jetzt doch noch einmal schnell an den Rechner - die Frage ist sonst doch zu oberflächig oder gar falsch beantwortet. Was haben wir hier?
Wir haben einen Methodenaufruf: Math.max( Param1, Param2)
Bei einem Methodenaufruf werden die Parameter von Links nach Rechts ausgewertet. Also hier erst Param1 und dann Param2
Param1 ist i++, d.h. es wird erst der Wert von i genommen. Dann wird i erhöht. Nach Auswerten des ersten Parameters ist i dann 2.
Param2 ist --i, hier wird erst der Wert von i um 1 reduziert und dann wird der Wert von i genommen. Damit wird hier auch wieder 1 genommen und i ist danach 1.
Sorry, für mögliche Verwirrung durch erste überschnelle Antworten auf dem Smartphone. Kurz vor dem ins Bett gehen sollte ich nichts auf dem Smartphone schreiben ... zumindest nicht ohne richtig nachzudenken.
Evtl. etwas Code zum spielen um dies etwas besser auszuprobieren:
Java:
staticvoidprint(int... values){for(int value : values)System.out.println(value);}
Da kannst Du dann die Auswertung der Parameter relativ gut beobachten. Also z.B. mit einem Aufruf von
Java:
int i =1;print(i++, i,--i);
Das zeigt dann halt:
Was wird bei i++ am Ende übergeben?
Was ist i nach der Auswertung des ersten Parameters?
Was wird dann bei --1 übergeben?
Da erkennt man dann relativ gut, dass erst der Parameter i++ ausgewertet wird. Da i 1 war, wird 1 als Parameter übergeben und danach ist i == 2. Daher ist der zweite Parameter 2. Beim dritten Parameter wird i erst reduziert und dann der Wert übergeben. Der ist dann wieder 1.
Die Ausgabe ist dann also
1
2
1
Das evtl. einfach um einmal damit etwas zu spielen.
Das erste Argument bekommt 1, das zweite Argument bekommt 0. Das Max von 0 und 1 ist 1. Die Post-Inkrementierung erfolgt erst nach dem Max-Methodenaufruf.
Das ist nicht korrekt. Die Parameter werden von links nach rechts ausgewertet und die Auswertung ist dann abgeschlossen. Incl. dem Post-Inkrement. Du kannst ja mit dem Beispielcode herumspielen, um dieses Verhalten zu verifizieren.
Das erste Argument bekommt 1, das zweite Argument bekommt 0. Das Max von 0 und 1 ist 1. Die Post-Inkrementierung erfolgt erst nach dem Max-Methodenaufruf.
Das ist nicht korrekt. Die Parameter werden von links nach rechts ausgewertet und die Auswertung ist dann abgeschlossen. Incl. dem Post-Inkrement. Du kannst ja mit dem Beispielcode herumspielen, um dieses Verhalten zu verifizieren.
Noch mal deutlicher ... Das erste Argument bekommt 1, dann wird inkrementiert, dann wird dekrementiert und erst dann bekommt das zweite Argument auch 1.