条件三元运算

Conditional Ternary Operations

首先,我最近遇到了这个问题,但一直找不到很好的解释:

int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2; 

我以前用过三元表达式所以很熟悉,说实话我什至不知道这个表达式叫什么...我认为它分解成这样

if (con1) or (con2) return 1         // if one is correct     
if (!con1) and (!con2) return 0      // if none are correct     
if (con1) not (con2) return 2        // if one but not the other

就像我说的,我真的不知道,所以我可能在一百万英里之外。

int x = (30 > 15)?((14 > 4) ? 1 : 0): 2; :

if (30 > 15) {
    if (14 > 4) 
        x = 1;
    else 
        x = 0;
} else {
    x = 2;
}

因为operator precedence in Java,这段代码:

int x = (30 > 15)?(14 > 4) ? 1 : 0 : 2;

将被解析为括号如下:

int x = (30 > 15) ? ((14 > 4) ? 1 : 0) : 2;

(优先级低于三元 ?: 的唯一运算符是各种赋值运算符:=+= 等)您的代码可以口头表达为:

  • 如果 (con1) 和 (con2) 将 1 赋值给 x
  • if (con1) and (not con2) 将 0 赋值给 x
  • 否则将2赋值给x

编辑:嵌套的三元运算符通常以特殊方式格式化,以使整个内容更易于阅读,尤其是当它们的深度超过两个时:

int x = condition_1 ? value_1     :
        condition_2 ? value_2     :
          .
          .
          .
        condition_n ? value_n     :
                      defaultValue; // for when all conditions are false

如果您想对“?”的其中一个部分使用三元表达式,这就不会那么干净了。反转条件的意义以在“:”部分保留嵌套是很常见的,但有时您需要在两个分支中嵌套。因此,您的示例声明可以重写为:

int x = (30 <= 15) ? 2 :
        (14 > 4)   ? 1 :
                     0 ;