楼主你好。理解二维数组归根还是要理解二维数据的内存结构。数组元素所需的内存空间是通过new运算符或者通过数组的初始化来分配的。二维数组的的实例化有以下几种方法: (1)直接为每一维分配内存,如: int a[][]; a = new int[2][2];(2)先分配第一位,再分配分配第二维空间,如“ int a[][] = new new int[2][]//先分配,第二维可以为空 a[0] = new int[2]; a[1] = new int[2];对于你提出的问题:int a[][]=new int[2][]; a[0]=new int[1];为什么这种形式可以 a[1]={1,2};这种却不可以因为“int a[][]=new int[2][];”这句已经为第一维分配了长度,且第一维的每一个元素存放的是第二维相应元素的首地址,第二维的每个元素是一个数组。数组是要先声明,再分配空间,再赋值的。其中声明和分配空间可以合在一句写,如int a[][]=new int[2][]。很明显,“a[1]={1,2}”肯定有误,因为a[1]虽然在“int a[][]=new int[2][]”声明了,但是还没有分配空间确定长度就直接赋予固定长度的值,那肯定不行。而“a[0]=new int[1]”这句没错是因为a[0]既声明了,也分配了长度为1的空间,此时赋不不赋值并不重要。希望对你有帮助!
//错误
int[] num = null;
num={1,2};
//正确
int[] num = {1,2};也就是说:
a[1] = null;
a[1] = {1,2};
但是二维数组中所有的对象都必须new出来。
(1)直接为每一维分配内存,如:
int a[][];
a = new int[2][2];(2)先分配第一位,再分配分配第二维空间,如“
int a[][] = new new int[2][]//先分配,第二维可以为空
a[0] = new int[2];
a[1] = new int[2];对于你提出的问题:int a[][]=new int[2][];
a[0]=new int[1];为什么这种形式可以
a[1]={1,2};这种却不可以因为“int a[][]=new int[2][];”这句已经为第一维分配了长度,且第一维的每一个元素存放的是第二维相应元素的首地址,第二维的每个元素是一个数组。数组是要先声明,再分配空间,再赋值的。其中声明和分配空间可以合在一句写,如int a[][]=new int[2][]。很明显,“a[1]={1,2}”肯定有误,因为a[1]虽然在“int a[][]=new int[2][]”声明了,但是还没有分配空间确定长度就直接赋予固定长度的值,那肯定不行。而“a[0]=new int[1]”这句没错是因为a[0]既声明了,也分配了长度为1的空间,此时赋不不赋值并不重要。希望对你有帮助!