You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode112题Java代码中括号为何影响三目运算执行结果

括号导致执行逻辑差异的核心原因

本质是Java运算符优先级规则导致的:Java中逻辑或运算符||的优先级高于三目运算符?:,不加括号时编译器不会按照预想逻辑拆分表达式,会按照优先级默认组合运算顺序。


两种写法的执行逻辑对比

1. 加括号的正确版本(可通过所有测试用例的写法)

代码片段:

return (root.left == null? false : helper(root.left, sum - root.val)) || 
    root.right == null? false : helper(root.right, sum - root.val);

括号优先级最高,执行顺序完全符合路径判断的预期:

  • 第一步:先计算括号内左子树的三目判断,得到左子树递归结果leftRes
  • 第二步:如果leftRes为true,||触发短路逻辑,直接返回true
  • 第三步:如果leftRes为false,再计算右子树的三目判断结果并返回
    整体逻辑是左子树存在符合要求的路径,或者右子树存在符合要求的路径,就返回true,和题目要求一致。

2. 去掉括号的错误版本

去掉第一个三目外层的括号后,代码实际等价于:

return ( (root.left == null? false : helper(root.left, sum - root.val)) || root.right == null )
    ? false : helper(root.right, sum - root.val);

因为||优先级更高,编译器会先把||左右两边的内容绑定成三目运算符的判断条件,执行逻辑完全错乱:

  • 第一步:先计算左子树递归结果 || root.right == null得到条件值cond
  • 第二步:如果cond为true,整个表达式直接返回false
  • 第三步:只有cond为false时,才会递归调用右子树的判断逻辑返回结果

最典型的错误场景:当前节点左子树递归已经找到符合要求的路径(返回true),此时true || 任意值的结果都是true,也就是cond = true,整个表达式直接返回false——本来应该返回正确结果的场景直接返回了错误值,自然无法通过测试用例。


内容的提问来源于stack exchange,提问作者BettyQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:01:10