`return <boolean exp> || 怎么样? <Object exp>` return 对象的方法的有效 return 语句?

How is `return <boolean exp> || <Object exp>` a valid return statement for a method that returns an Object?

我正在看书,看到这段代码:

public Animal getWinner(List<Animal> animals) {
    return animals == null || animals.size() == 0 ? null : animals.get(0);
}

后一个表达式很好,因为它 return 是一个 Animal 或 null。前一个表达式令人费解,因为它只是一个布尔表达式。

我做了一个测试class并调用了getWinner(null)。它 return 编辑 null。据我所知,animals == null 为真,表达式会短路,我希望该方法为 return true 而不是 null.

这行如何编译,甚至按预期工作?

这与 Java 中的 operator precedence 以及哪个运算符(布尔值或三元值)将首先执行有关。

三元组的优先级较低,所以 or 将首先被评估,这意味着它看起来像这样带有括号:

return (animals == null || animals.size() == 0) ? null : animals.get(0);

所以整行的结果要么是return null要么是return animals.get(0)