5

我想这是一个非常基本的问题,我只是想知道这段代码是如何阅读的:

return someboolean ? new someinstanceofsomething() : someotherboolean ? new otherinstance() : new third instance(); 

我想现在在我写它的时候,我有点理解这个陈述。如果为真,它返回选项一,但如果为假,则另一个布尔值检查并返回其余两个选项之一?我将继续留下这个问题,因为我以前没有见过它,也许其他人也没有见过。

您可以无限期地在三元运算中进行三元运算吗?

编辑:另外,为什么这/这对于代码来说并不比使用一堆 if 语句更好?

4

2 回答 2

16

它在JLS #15.25中定义:

条件运算符在语法上是右关联的(它从右到左分组)。因此,a?b:c?d:e?f:g意思与 相同a?b:(c?d:(e?f:g))

在你的情况下,

return someboolean ? new someinstanceofsomething() : someotherboolean ? new otherinstance() : new third instance();

相当于:

return someboolean ? new someinstanceofsomething() : (someotherboolean ? new otherinstance() : new third instance());
于 2013-08-09T12:33:24.520 回答
6

三元运算符是右结合的。请参阅assylias的 JLS 参考答案。

您的示例将转化为:

if (someboolean) {
  return new someinstanceofsomething();
} else {
  if (someotherboolean) {
    return new otherinstance();
  } else {
    return new thirdinstance()
  }
}

是的,你可以无限期地嵌套这些。

于 2013-08-09T12:33:45.040 回答