重点陈述:把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。对于二维数组的理解,我们可以看成是一维数组。其实,从数组底层的运行机制来看,其实没有多维数组。

0x00、二维数组[][]:数组中的数组

Java基础 | 深入理解多维数组_数组


动态和静态初始化规则如下

规则1:

格式1(动态初始化):int[][] arr = new int[3][2];

定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0], arr[1], arr[2],给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;

规则2:

格式2(动态初始化):int[][] arr = new int[3][];

二维数组中有3个一维数组,每个一维数组都是默认初始化值null (注意:区别于格式1),可以对这个三个一维数组分别进行初始化,arr[0] = new int[3];    arr[1] = new int[1];   arr[2] = new int[2]

规则3:

int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};

定义一个名称为arr的二维数组,二维数组中有三个一维数组,每一个一维数组中具体元素也都已初始化,第一个一维数组 arr[0] = {3,8,2};第二个一维数组 arr[1] = {2,7};第三个一维数组 arr[2] = {9,0,1,6};第三个一维数组的长度表示方式:arr[2].length;

Java基础 | 深入理解多维数组_二维数组_02

规则注意:

  • int[][]arr = new int[][3];  是经典的错误写法,因为不同于C++的写法。
  • 注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
  • 注意Java中多维数组不必都是规则矩阵形式

Java基础 | 深入理解多维数组_一维数组_03

0x02、深入理解多维数组与内存地址的关系


因为Java编程语言中的二维数组只不过是数组的数组。所以在Java二维数组中,数据存储在行和列中,我们可以使用行索引和列索引来访问记录(就像一个Excel文件)。 如果数据是线性的,我们可以使用一维数组。然而,要处理多层次数据,我们必须使用多维数组。Java中的二维数组是多维数组的最简单形式。

Java基础 | 深入理解多维数组_数组_04

数组的初始化遵循顺序执行,不能空对空。

Java基础 | 深入理解多维数组_一维数组_05

实战代码:

分析这段代码与内存的关系:

​int[][] arr = new int[3][]; arr[1] = new int[]{1,2,3}; arr[2] = new int[3]; Sysout(arr[0]);//null Sysout(arr[0][0]);//​

Java基础 | 深入理解多维数组_一维数组_06

实战代码2:

查看这段代码与内存的关系:

​int[][] arr1 = new int[4][]; arr1[0] = new int[3]; arr1[1] = new int[]{1,2,3}; arr1[0][2] = 5; arr1 = new int[2][];​

Java基础 | 深入理解多维数组_数组_07

0x03、输出代码实例:


通过这个输出数组,可以实际观察到代码中的是什么?

class TwoDimensionalString
{
public static void main(String[] args)
{
String[][] str = new String[][]{{"one", "two"}, {"three", "four"},{"five","six"}};
System.out.println("Two dimensional string array elements are :\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
System.out.println("str["+i+"]["+j+"]:"+str[i][j]);
}
}
}
}

成功得到结果:

Two dimensional string array elements are :

str[0][0]:one
str[0][1]:two
str[1][0]:three
str[1][1]:four
str[2][0]:five
str[2][1]:six

0x04、总结:


在本文中,我们看到了Java中的多维数组及其用途,在Java中声明二维数组的各种方法,Java如何处理二维数组,以及JVM如何分配内存来实现二维数组,可以使用索引来访问和更改二维数组的元素,最后在Java中初始化和声明二维数组的各种方法,以及声明语句中的一些常见错误。


资料链接:

1.https://www.tutorialgateway.org/two-dimensional-array-in-java/

2.https://javatutoring.com/java-two-dimensional-array/

3.https://www.scaler.com/topics/two-dimensional-array-in-java/