为什么我不能在这个 if-test 中有 IndexOutOfBoundsException?
Why I can't have a IndexOutOfBoundsException inside this if-test?
我在理解这部分代码时遇到了一些困难:
for (int i = 0; i < nums.length - 2; i++) {
if (i != 0 && nums[i] == nums[i - 1]) continue;
当我们从第一次迭代“i=0”开始时:
"nums[0-1] -> nums[-1] ",
不是索引越界?因为该程序可以运行,但我不知道为什么不给出 IndexOutOfBounds。
在 if 检查中,您首先检查是否 I!=0,当 I=0 时,这是错误的,因此它不会进行可能导致越界错误的第二次检查。
相反,它直接进入 I=1 的下一次迭代,并且不会抛出越界
另外我想说的是,与其从 I=0 开始并添加 I!=0 检查,不如将“int i=1”放入 for 循环中。然后你可以删除第一个检查
在第一次迭代中,第一个布尔表达式产生 false(因为 i!=0
为 false)。所以解释器不会在 &&
运算符的另一边评估任何东西。而且它从不尝试使用负数组索引。
我在理解这部分代码时遇到了一些困难:
for (int i = 0; i < nums.length - 2; i++) {
if (i != 0 && nums[i] == nums[i - 1]) continue;
当我们从第一次迭代“i=0”开始时:
"nums[0-1] -> nums[-1] ",
不是索引越界?因为该程序可以运行,但我不知道为什么不给出 IndexOutOfBounds。
在 if 检查中,您首先检查是否 I!=0,当 I=0 时,这是错误的,因此它不会进行可能导致越界错误的第二次检查。
相反,它直接进入 I=1 的下一次迭代,并且不会抛出越界
另外我想说的是,与其从 I=0 开始并添加 I!=0 检查,不如将“int i=1”放入 for 循环中。然后你可以删除第一个检查
在第一次迭代中,第一个布尔表达式产生 false(因为 i!=0
为 false)。所以解释器不会在 &&
运算符的另一边评估任何东西。而且它从不尝试使用负数组索引。