为什么条件(三元)运算符在 lhs 为假时以逻辑 AND 求值

Why is the conditional (ternary) operator evaluated in a logical AND when the lhs is false

return super.isAvailable() && expander != null 
    && rightNotLeft ? !expander.isExpandedRight() : expander.isExpandedRight();

我的问题是,当 expander 为 null 时,我遇到了空指针异常。但我认为这不应该发生,因为 expander!=null 被评估为 false,并且由于使用了 AND,整个表达式应该短路并且 return false.

return super.isAvailable() && expander != null 
    && (rightNotLeft ? !expander.isExpandedRight() : expander.isExpandedRight());

上面的代码(加上括号)解决了问题。然而,这对我来说没有意义,因为无论条件运算符中发生什么,都无法 return true 所以它不应该短路吗?

感谢您的回复。

这是由于 operator precedence。你没有明确括号的条件实际上被评估为

return (super.isAvailable() && expander != null 
    && rightNotLeft) ? !expander.isExpandedRight() : expander.isExpandedRight();