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

为何i>0置于&&后触发数组越界异常,置于前则正常?

为什么i>0在&&运算符前后位置会引发数组越界异常?

这是因为Java中的&&是短路逻辑与运算符,核心特性是:如果左边条件为false,会直接跳过右边条件的计算,不会执行右侧表达式。

触发异常的代码分析

循环第一次执行时i=0,if条件会先计算arr[i]==arr[i-1],也就是arr[0] == arr[-1]。数组索引不能为负数,这直接触发ArrayIndexOutOfBoundsException异常。

for(int i=0; i< arr.length; i++){
    start =0;
    if((arr[i]==arr[i-1]) && i>0){
        start =  end+1;
    }
    end = outer.size()-1;
}

正常运行的代码分析

将i>0放在&&前面后,当i=0时,左边的i>0为false,短路逻辑与直接判定整个条件为false,不会执行右侧的arr[i]==arr[i-1],也就避免了访问数组的非法索引。

for(int i=0; i< arr.length; i++){
    start =0;
    if(i>0 && (arr[i]==arr[i-1]) ){
        start =  end+1;
    }
    end = outer.size()-1;
}

本质就是利用短路求值的特性,先判断索引合法性,再执行数组访问操作,从根源避免了越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:15:41