Java语句:混淆代码 - `?:`

时间:2012-11-16 04:49:23

标签: java if-statement binary-tree ternary-operator

  

可能重复:
  What is the Java ?: operator called and what does it do?

我正在尝试阅读二叉树的实现,并且遇到了这一行代码:

if (...) {
   ...
} else {
    node = ( node.left != null ) ? node.left : node.right;    //this line
}

return node;

谁能告诉我这条线是什么意思?我最好的猜测是它是某种条件陈述。

2 个答案:

答案 0 :(得分:9)

它被称为Conditional Operator

expression1 ? expression2: expression3中,expression1返回boolean值。如果是true,则评估expression2,否则评估expression3

所以在你的代码片段中: -

node = ( node.left != null ) ? node.left : node.right;

相当于: -

if (node.left != null) {
    node = node.left;
} else {
    node = node.right;
}

答案 1 :(得分:3)

这被称为三元运算符,因为在大多数语言中,它是唯一带有3个参数的运算符。它的格式为:

a ? b : c
如果b为真,则

并评估为a,否则为c。它几乎可以在任何地方使用,但最常用于分配操作,因为在更复杂的情况下读取变得非常困难。

在旁注中,“混淆”在这里不是正确的术语 - 这意味着故意难以阅读的代码。这可能更准确地称为“模糊”,尽管它是一个常见的运算符。