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



可能的重复项:
什么是Java?:运算符叫,它做什么?

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

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

谁能告诉我这句话是什么意思?我最好的猜测是它是某种条件语句。

被称为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;
}

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

a ? b : c

并评估b a是否属实,或者c其他情况。它几乎可以在任何地方使用,但最常用于赋值操作,因为在更复杂的情况下变得非常难以阅读。

附带说明一下,"混淆"在这里不是正确的术语 - 这是针对故意使难以阅读的代码。这可能更准确地称为"晦涩",尽管它是一个常见的运算符。

最新更新