Java三元运算符内部的三元运算符,如何评估?

时间:2013-08-09 12:30:26

标签: java ternary-operator

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

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

我想我现在正在写作,我有点理解这句话。如果为true,则返回选项1,但如果为false则返回另一个布尔检查,并返回剩下的两个选项之一?我将继续留下这个问题,因为我之前没有看到它,也许其他人也没有。

你能否在三元运营中无限期地继续进行三元运作?

编辑:为什么这对于代码而言比使用一堆if语句更好?

2 个答案:

答案 0 :(得分:15)

它在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());

答案 1 :(得分:5)

三元运算符是右关联的。有关JLS参考,请参阅assylias的答案。

您的示例将转换为:

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

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