为什么java调试时数组出界,但能正常运行

问题遇到的现象和发生背景

在调用Math.min函数时,其中一个参数是数组元素,但是数组出界却能正常运行,为啥呢

用代码块功能插入代码,请勿粘贴截图
for (int i = 1; i <= amount; i++) {
            for (int j = 0; j < coins.length; j++) {
                if (coins[j] <= i) {
                    // dp[i-coins[j]]数组出界了,但是没有报错,而且能够以正常的逻辑运行
                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);
                }
            }
        }
运行结果及报错内容

调试中发现有出界异常,但运行结果正确

img

想知道

  1. 异常是被捕获了吗
  2. 为什么逻辑没有受影响,运行结果正确,因为异常的那个项被舍去了,只能选dp[i]做最小值吗

i<=amount可能导致了越界。但如果越界后的内容是可以访问的,那从程序也是可以继续运行的。