【发布时间】:2013-05-28 06:12:53
【问题描述】:
我遇到过这段代码来计算 AVL 树节点的高度:
private int height (AvlNode<T> t) {
return t == null ? -1 : t.height;
}
? 和 : 是什么意思?
【问题讨论】:
标签: java conditional-statements
我遇到过这段代码来计算 AVL 树节点的高度:
private int height (AvlNode<T> t) {
return t == null ? -1 : t.height;
}
? 和 : 是什么意思?
【问题讨论】:
标签: java conditional-statements
这是一个三元运算符。一般语法是:
cond ? ifTrue : ifFalse
其中cond 是一个返回布尔值的表达式。当cond 为真时,整个表达式被评估为ifTrue,否则评估为ifFalse。当然,ifTrue 和 ifFalse 都必须是兼容的类型(注意 null 可以用于对象)。
实际上,上面的代码完全等同于以下代码:
if (t == null)
return -1;
return t.height;
这是在许多语言中都可以找到的非常经典的运算符。一种没有此运算符的语言是 Python。
【讨论】:
ifTrue if cond else ifFalse
这就像一个 if 测试。
您的示例类似于以下代码:
if (t == null) return -1;
else return t.height;
【讨论】:
相当于:
if (t==null)
return -1;
else
return t.height;
条件运算符 ? : 用于根据第一个表达式的值返回任一表达式的结果。
它的工作原理是计算 boolean expr,然后决定要计算哪个表达式。
【讨论】:
如果 t 为 null,它将返回 -1,否则将返回 t.hight。这是一种更简洁的方式来实现空检查,而不是拥有
if(t==null)
return -1
else
return t.hight
但它可能看起来比“if 方法”更神秘
【讨论】:
(a > b) ? a : b;
是一个表达式,它返回两个值之一,a
或 b。测试条件 (a > b)。如果第一个是真的 返回值 a。如果为假,则第二个值 b 为 回来。返回哪个值取决于条件 测试,a > b。条件可以是任何返回 a 布尔值。
【讨论】: