以二维数组 Integer[][] MAP = new Integer[100][2]为例
,
实际上定义了一个包含100个元素的数组,每个元素本身也是一个数组,这个两个子数组又会包含两个Integer。
那么在执行 MAP[index] == null 时,实际上是判断 MAP
数组中第 index
个位置的元素是否为 null
由于初始化了 MAP
为 new Integer[100][2]
,这表明你已经为每一个 index
从0到99分配了一个长度为2的数组。因此,在这种初始化之后,MAP[index]
不会为 null
—— 它总是指向一个长度为2的数组
而当我们检查MAP[index][0] == null 时,则是判断index处的第1个元素是否为null,此时是否为null呢? 是
在Java中,对于对象类型的数组(如 Integer
类型),数组的默认初始化值是 null
。因此,尽管 MAP[index]
是一个非 null
的数组,MAP[index][0]
和 MAP[index][1]
默认都是 null
当我们使用基本数据类型(如 int
)或者 String
类型来定义二维数组时,情况会有所不同。
基本数据类型 int[][] MAP = new int[100][2];:对于 int
类型的数组,数组的默认值是 0
。所以当你检查 MAP[index] == 0
时,这实际上是在检查数组的第 index
个位置是否包含值 0
(在这种情况下,它总是 false
)。如果你检查 MAP[index][0] == 0
,你是在检查 MAP[index]
指向的数组的第一个元素是否为 0
。String 类型 String[][] MAP = new String[100][2];:
对于 String
类型的数组,数组的默认值是 null
。当你检查 MAP[index] == null
时,你是在检查数组的第 index
个位置是否为 null
。
如果你检查 MAP[index][0] == null
,你是在检查 MAP[index]
指向的数组的第一个元素是否为 null
。