Als ich mich auf die Prüfung zum Oracle Certified Associate Java SE 8-Programmierer 1 vorbereitete, stieß ich im offiziellen Studienhandbuch auf den folgenden Absatz über den ternären Ausdruck:
Auswertung
ternärer Ausdrücke Ab Java 7 wird zur Laufzeit nur einer der rechten Ausdrücke des ternären Operators ausgewertet. In ähnlicher Weise wie bei den Kurzschlussoperatoren wird einer der beiden rechten Ausdrücke in einem ternären Operator möglicherweise nicht zur Laufzeit angewendet, wenn er einen Nebeneffekt ausführt. Lassen Sie uns dieses Prinzip anhand des folgenden Beispiels veranschaulichen: [...]
Es heißt, dass nur einer der beiden Ausdrücke ausgewertet wird, was anhand des folgenden Beispiels demonstriert wird:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Hier nur y
inkrementiert, aber z
nicht, wie Sie es erwarten würden.
Ich stolpere über den Anfang des Absatzes (gelb markiert) mit der Aufschrift "Ab Java 7, ...". Ich habe den gleichen Code mit Java 1.6 getestet und kann keinen Unterschied im Verhalten feststellen. Ich habe erwartet, dass Java 1.6 beide Ausdrücke nur anhand der im Absatz angegebenen Informationen bewertet. Hat jemand eine Idee, was er mit "Ab Java 7, ..." sagen wollte?
Bearbeiten: Um Verwirrung zu vermeiden: Es läuft auf die Frage hinaus: Hat sich beim Wechsel von Java 6 zu Java 7 etwas geändert, da sie "Ab Java 7" schreiben?
quelle
Antworten:
Ich bin einer der Autoren des Buches, aus dem dies stammt. Obwohl ich diesen bestimmten Satz nicht geschrieben habe, stimme ich zu, dass die Absicht darin bestand, "dies wurde auf Java 7 getestet". Ich werde eine Notiz machen, um das zu entfernen, wenn wir eine andere Ausgabe schreiben.
Um es klar auszudrücken, hat sich der ternäre Operator in Java 8, 7, 6 usw. genauso verhalten. Und ich wäre ziemlich überrascht, wenn er sich in Zukunft ändern würde.
quelle
Aus dem Java 6 JLS :
Ein ähnlicher Wortlaut erscheint auch in JLS-Editionen, die auf 1.0 zurückgehen . Das Verhalten hat sich in Java 7 nicht geändert. Der Studienführer ist nur schlecht formuliert.
quelle