【问题标题】:return t == null ? -1 : t.height; what do ? and : mean?返回 t == null ? -1:t.高度;做什么 ?和:是什么意思?
【发布时间】:2013-05-28 06:12:53
【问题描述】:

我遇到过这段代码来计算 AVL 树节点的高度:

private int height (AvlNode<T> t) {
  return t == null ? -1 : t.height; 
}

?: 是什么意思?

【问题讨论】:

    标签: java conditional-statements


    【解决方案1】:

    这是一个三元运算符。一般语法是:

    cond ? ifTrue : ifFalse
    

    其中cond 是一个返回布尔值的表达式。当cond 为真时,整个表达式被评估为ifTrue,否则评估为ifFalse。当然,ifTrueifFalse 都必须是兼容的类型(注意 null 可以用于对象)。

    实际上,上面的代码完全等同于以下代码:

    if (t == null)
        return -1;
    return t.height;
    

    这是在许多语言中都可以找到的非常经典的运算符。一种没有此运算符的语言是 Python。

    【讨论】:

    • python 有类似的东西ifTrue if cond else ifFalse
    • @furas 是的,但不是这个运算符本身
    【解决方案2】:

    这就像一个 if 测试。

    您的示例类似于以下代码:

    if (t == null) return -1;
    else return t.height;
    

    【讨论】:

      【解决方案3】:

      相当于:

      if (t==null)
          return -1;
      else
          return t.height;
      

      条件运算符 ? : 用于根据第一个表达式的值返回任一表达式的结果。

      它的工作原理是计算 boolean expr,然后决定要计算哪个表达式。

      【讨论】:

        【解决方案4】:

        如果 t 为 null,它将返回 -1,否则将返回 t.hight。这是一种更简洁的方式来实现空检查,而不是拥有

        if(t==null)
           return -1
        else
           return t.hight
        

        但它可能看起来比“if 方法”更神秘

        【讨论】:

          【解决方案5】:
          (a > b) ? a : b; 
          

          是一个表达式,它返回两个值之一,a

          或 b。测试条件 (a > b)。如果第一个是真的 返回值 a。如果为假,则第二个值 b 为 回来。返回哪个值取决于条件 测试,a > b。条件可以是任何返回 a 布尔值。

          【讨论】:

            猜你喜欢
            • 2021-11-16
            • 1970-01-01
            • 1970-01-01
            • 2021-10-29
            • 1970-01-01
            • 2014-04-02
            • 1970-01-01
            • 2020-04-13
            • 1970-01-01
            相关资源
            最近更新 更多