int a[][]=new int[2][];
a[0]=new int[1];为什么这种形式可以
a[1]={1,2};这种却不可以

解决方案 »

  1.   

    看一个例子:
         //错误
         int[] num = null;
         num={1,2};
         //正确
         int[] num = {1,2};也就是说:
             a[1] = null;
             a[1] = {1,2};   
      

  2.   

    Java的数组都是分配在堆上,严格来说都需要new出来。但是也许是为了照顾其他语言的使用者,还保留了一维数组的声明形式,例如a={1,2,3};
    但是二维数组中所有的对象都必须new出来。
      

  3.   

    楼主你好。理解二维数组归根还是要理解二维数据的内存结构。数组元素所需的内存空间是通过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的空间,此时赋不不赋值并不重要。希望对你有帮助!