为什么我不能在这个 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)。所以解释器不会在 && 运算符的另一边评估任何东西。而且它从不尝试使用负数组索引。