在准备Oracle Certified Associate Java SE 8程序员1考试时,我看到了官方学习指南中有关三元表达式的以下段落:
三元表达式的评估
从Java 7开始,在运行时只会评估三元运算符右边的一个表达式。类似于短路运算符,如果三元运算符的两个右侧表达式之一执行了副作用,则在运行时可能不会应用其中一个表达式。让我们通过以下示例来说明这个原则: [...]
这段话说只有两个表达式中的一个被评估,并用以下示例进行了演示。
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
这里,只有y
递增,但z
没有,这与您的期望不同。
我遇到的问题是段落开头的部分(用黄色标出),其中写道"As of Java 7, ..."。我使用Java 1.6测试了相同的代码,但行为没有任何区别。根据段落中的信息,我本来期望Java 1.6会对两个表达式都求值。是否有人知道他们在"As of Java 7,..."中想要表达什么意思?
编辑:为了避免混淆:问题归结为,既然他们写道“从Java 7开始”,那么在从Java 6切换到Java 7时,三元运算符是否有任何更改?