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

Java中if条件有无括号的运行差异及数组越界问题求解

这是Java逻辑运算符优先级和短路规则共同作用的结果,具体原因如下:

前置基础规则

  • Java中 &&(逻辑与)的运算优先级高于 ||(逻辑或),运算时会优先计算&&关联的表达式
  • && 短路规则:仅当左侧表达式结果为true时,才会执行右侧表达式;如果左侧为false,直接跳过右侧表达式计算
  • || 短路规则:仅当左侧表达式结果为false时,才会执行右侧表达式;如果左侧为true,直接跳过右侧表达式计算

第一段代码异常原因

第一段代码原文:

if ((idx >= 0) && (open[idx] == '(') || (open[idx] == '{')) {

由于&&优先级更高,代码实际的运算分组等价于:

if ( ( (idx >= 0) && (open[idx] == '(') ) || (open[idx] == '{') ) {

当idx = -1时执行逻辑:

  1. 先计算||左侧的(idx >=0) && (open[idx] == '('):idx >=0结果为false,&&触发短路,这部分整体返回false
  2. 此时||左侧为false,需要继续计算右侧的open[idx] == '{',直接访问open[-1]触发数组越界异常

第二段代码正常运行原因

第二段代码原文:

if ((idx >= 0) && ((open[idx] == '(') || (open[idx] == '{'))) {

代码通过括号显式调整了运算分组,实际逻辑等价于:

if ( (idx >= 0) && ( (open[idx] == '(') || (open[idx] == '{') ) ) {

当idx = -1时执行逻辑:

  1. 先计算&&左侧的idx >=0,结果为false,&&直接触发短路,完全不会执行右侧的数组访问逻辑,因此不会出现越界异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:45:02