Vorbereitung auf die Oracle Certified Associate Java SE 8 Programmer 1 Prüfung, stieß ich auf den folgenden Absatz über dem ternären Ausdruck in der offiziellen Study Guide:Ternärer Operator in Java, der nur einen Ausdruck seit Java 7 auswertet - war das in Java 1.6 und niedriger anders?
Ternary Expression Evaluation
Ab Java 7, Nur einer der rechten Ausdrücke des ternären Operators wird zur Laufzeit ausgewertet. Ähnlich wie bei den Kurzschlussoperatoren kann, wenn einer der beiden rechten Ausdrücke in einem ternären Operator einen Nebeneffekt ausführt, dieser zur Laufzeit nicht angewendet werden. Lassen Sie uns dieses Prinzip mit dem folgenden Beispiel veranschaulichen: [...]
Er sagt, dass nur einer der beiden Ausdrücke ausgewertet, mit dem folgenden Beispiel demonstriert:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
hier nur y
Schritten , aber z
nicht, wie Sie es erwarten würden.
Worüber ich stolpere ist der Anfang des Absatzes (gelb markiert), wo steht "Ab Java 7, ...". Ich habe den gleichen Code mit Java 1.6 getestet und finde keinen Unterschied im Verhalten. Ich erwartete, dass Java 1.6 beide Ausdrücke nur anhand der Informationen aus dem Absatz bewertet. Hat jemand eine Idee was sie mit "Ab Java 7, ..." sagen wollten?
Bearbeiten: Um Verwechslungen zu vermeiden: Es läuft auf die Frage hinaus, seit sie 'ab Java 7' schreiben, gab es irgendwas, was den ternären Operator änderte, wenn von Java 6 zu Java 7 gewechselt wurde?
Warum sollten Sie erwarten, dass z auch erhöht wird? Das ergibt für mich keinen Sinn. –
was ist das Problem, sie sagten, nur 1 Ausdruck wird ausgewertet, y ++ 'oder' z ++ 'abhängig von der Bedingung – silentprogrammer
klingt wie ein schlecht geschriebenes Buch, ternäre Betreiber haben sich seit dem Einschalten von Java nicht verändert, afaik – NimChimpsky