Java二维数组初始化有静态和动态两种:静态用{{}}直接赋值,支持不规则数组;动态用new指定行列数,可创建规则或不规则数组,再通过循环等填充数据。

Java中初始化二维数组有多种方式,核心在于理解二维数组本质是“一维数组的数组”,即每个元素本身是一个一维数组。初始化时需明确行数(外层数组长度)和列数(每个内层数组长度),可静态指定或动态分配。
静态初始化:直接赋值,适合已知全部元素
适用于元素值确定、数量较少的场景,编译期就完成内存分配和赋值。
- 方式一(推荐):int[][] arr = {{1, 2}, {3, 4}, {5, 6}}; —— 自动推断为3行2列,每行长度可不同(不规则数组)
- 方式二:int[][] arr = new int[][]{{1, 2}, {3, 4}}; —— 显式使用new,效果同上,但写法略冗余
动态初始化:先分配空间,再赋值,适合运行时确定大小
适用于行数、列数由变量决定,或需后续逐个设置元素的场景。
- 规则二维数组(每行列数相同):int[][] arr = new int[3][4]; —— 创建3×4的int数组,所有元素默认为0
- 不规则二维数组(每行列数可不同):int[][] arr = new int[3][]; 后续分别初始化各行:arr[0] = new int[2]; arr[1] = new int[5]; arr[2] = new int[3];
结合循环的初始化:灵活填充数据
常用于按规律生成元素值,或从输入/计算中获取数据。
立即学习“Java免费学习笔记(深入)”;
- 例如创建乘法表:int[][] table = new int[10][10]; for (int i = 0; i
- 注意:访问table[i].length而非table.length来获取当前行长度,尤其在不规则数组中必须这样做
常见误区与注意事项
避免空指针、越界等运行时异常,关键在理解引用关系。
- 不能直接写 int[][] arr = new int[3][4]{{1,2},{3,4}}; —— 静态初始化和动态初始化不能混用
- 声明后未初始化就访问会报NullPointerException,例如:int[][] arr = new int[2][]; System.out.println(arr[0][0]);(arr[0]为null)
- 二维数组不是矩阵——Java中没有真正意义上的“矩形”强制约束,arr[0].length 和 arr[1].length 可以不同










