为了准备Oracle认证助理Java SE 8程序员1考试,我在官方学习指南中看到了关于三元表达的以下段落:
三元表达式评估从Java 7开始,只有一个三元运算符的右 Watch 达式将在运行时进行评估 . 以类似于短路运算符的方式,如果三元运算符中的两个右 Watch 达式之一执行副作用,则可能不会在运行时应用它 . 让我们用以下例子来说明这个原则:[...]
它表示只评估两个表达式中的一个,演示如下:
int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
在这里,只有 y
增量,但 z
没有,正如您所期望的那样 .
我绊倒的是段落的开头(标记为黄色),其中显示“从Java 7开始,......” . 我用Java 1.6测试了相同的代码,但是我找不到行为上的差异 . 我希望Java 1.6只根据段落中给出的信息来评估这两个表达式 . 有没有人知道他们想用“从Java 7开始......”来说什么?
Edit: 为了避免混淆:归结为这个问题,因为他们写了'As of Java 7',从Java 6切换到Java 7时,三元运算符有什么变化吗?
2 回答
我是这本书的作者之一 . 虽然我没有写那个特定的句子,但我同意其意图是“这是在Java 7上测试的” . 如果我们写另一个版本,我会记下去除 .
为了清楚起见,三元运算符在Java 8,7,6等中表现相同 . 如果将来发生变化,我会感到非常惊讶 .
来自Java 6 JLS:
类似的措辞也出现在JLS版本中,可以追溯到1.0 . Java 7中的行为没有改变;学习指南的措辞很差 .