java - 为什么这个 Java 二维数组不抛出 IndexOutOfBoundException?

标签 java arrays

我正在初始化一个二维数组,同时指定行数和列数。如果我插入的项目多于初始化中声明的数量,我预计它会抛出错误,但代码运行正常。

static void arrayChecks(){
    int[][] arr = new int[2][2];
    arr[0] = new int[]{1,2};
    arr[1] = new int[]{3,4,5};   //adding 3 items to a 2-column row. No exception thrown
    //arr[2] = new int[]{6,7};   //throws ArrayIndexOutOfBoundsException as expected.
    for(int[] a : arr){
        for(int i : a){
            System.out.print(String.valueOf(i));
        }
    }
    //output = 12345
}

最佳答案

Java 不像某些语言那样支持二维数组。它只是将它们视为数组引用的数组。这些内部数组可以重新分配给任意长度的另一个数组。

int[][] arr = new int[2][2]; 的脱糖版本是:

int[][] arr = new int[2][];
arr[0] = new int[2];
arr[1] = new int[2];

您可以将 arr[1] 重新分配给您想要的任何 int[]。 Java 允许交错数组,其中每个内部数组的长度不同。

引用 - Example 15.10.2-2. Multi-Dimensional Array Creation

关于java - 为什么这个 Java 二维数组不抛出 IndexOutOfBoundException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443305/

相关文章:

javascript - 针对html内容进行滚动计算

java - 在 Android 中,为什么 SQLite 数据库不更新?

java - PDFBox 的单选按钮显示问题

c - 在 C 中,如何打印出一个字符数组然后清空它?

python - 将字符串与字符序列进行比较

java - 如何获取二维数组中行和列的长度?

c# - 数组[]的开放泛型是什么?

Java 转换 : is the compiler wrong, 还是语言规范错误,还是我错了?

java - 通过类字段、重写的类方法或属性传递参数

Java - 运行时反射设置值