static void print(int... values) {
for (int value : values)
System.out.println(value);
}
int i = 1;
print(i++, i, --i);
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.Ich bitte um eine Erklärung, warum der nachfolgende Code die Ausgabe 1 liefert:
Java:
Code:int i = 1; System.out.println( Math.max( i++, --i ) ); // 1
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.Die Post-Inkrementierung erfolgt erst nach dem Max-Methodenaufruf.
Sorry, ich hatte, ähnlich wie Konrad, gerade voll daneben gehauen: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.
public static void main(final String[] args) {
System.out.println("Hello world !!!");
int i = 1;
print(i++, --i);
}
public static void print(int a, int b) {
System.out.println(a + " " + b);
}
Du hast vollkommen recht. Ich habe mich schon "verbessert".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.Das erste Argument bekommt 1, das zweite Argument bekommt 0.
public static void main(final String[] args) {
System.out.println("Hello world !!!");
int i = 1;
print(i++, i, --i);
}
public static void print(int a, int c, int b) {
System.out.println(a + " " + c + " " + b);
}