`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)
。
我正在看书,看到这段代码:
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)
。