为什么 char[][] a = new char[5][]合法?数组创建的时候不是要指明大小吗?

时间:2022-04-25 19:27:34
如题,我们创建一维数组的时候必须指明大小,否则编译不通过。但是,标题中展示的情况为什么合法?

5 个解决方案

#1


二维数组可以定义成一个不规则数组,行数是固定的,每行的列数不固定

#2


public class Test {
 
public static void main(String[] args) {
System.out.println("he said:\" I fall in love with her! \".");
}
}

#3


定义数组时对第一维的长度可以不指定,但第二维的长度不能省,因为系统会根据总个数和第二维的长度计算出第一维的长度
其实你可以这样理解
因为二维数组是由若干个一维数组组成的,在内存中数组是按行存放的,因此,在定义二维数组时必须指定列数。 

#4


我个人的理解:
这种情况可以看成一个长度为5的一维数组a,a的元素类型定义为数组对象,但是对象数组里面存的并不是对象本身,而是对象的引用,所以在创建这个长度为5的一维数组a的时候,其内部的数组元素并不需要实例化,那么也就不需要指定长度,只有在需要往a这个一维数组内部填充数组元素的时候,这个时候填充进去的数组才是需要实例化的,需要指定长度的。从这点分析,填充进去的数组的长度其实并不是唯一的,因为不管填进去的数组的长度是多少,终归他们都是数组类型,并不违反java语法。
综上,声明一个二维数组,只需要指定第一个长度就可以了。

#5


很简单定义二维数组的声明没办法给每一行初始化一个列数咯。但是你可以轻易地初始化需要多少行。

当需要声明每一行列数的时候,你需要 a[0] = new char[element_num];
或者 a[0] = {'a', 'b', 'c'}

#1


二维数组可以定义成一个不规则数组,行数是固定的,每行的列数不固定

#2


public class Test {
 
public static void main(String[] args) {
System.out.println("he said:\" I fall in love with her! \".");
}
}

#3


定义数组时对第一维的长度可以不指定,但第二维的长度不能省,因为系统会根据总个数和第二维的长度计算出第一维的长度
其实你可以这样理解
因为二维数组是由若干个一维数组组成的,在内存中数组是按行存放的,因此,在定义二维数组时必须指定列数。 

#4


我个人的理解:
这种情况可以看成一个长度为5的一维数组a,a的元素类型定义为数组对象,但是对象数组里面存的并不是对象本身,而是对象的引用,所以在创建这个长度为5的一维数组a的时候,其内部的数组元素并不需要实例化,那么也就不需要指定长度,只有在需要往a这个一维数组内部填充数组元素的时候,这个时候填充进去的数组才是需要实例化的,需要指定长度的。从这点分析,填充进去的数组的长度其实并不是唯一的,因为不管填进去的数组的长度是多少,终归他们都是数组类型,并不违反java语法。
综上,声明一个二维数组,只需要指定第一个长度就可以了。

#5


很简单定义二维数组的声明没办法给每一行初始化一个列数咯。但是你可以轻易地初始化需要多少行。

当需要声明每一行列数的时候,你需要 a[0] = new char[element_num];
或者 a[0] = {'a', 'b', 'c'}