为何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
相关产品推荐
相关产品推荐

