黑马程序员技术交流社区

标题: 关于二维数组的疑问[已解决] [打印本页]

作者: 于启会    时间: 2012-8-29 14:05
标题: 关于二维数组的疑问[已解决]
本帖最后由 于启会 于 2012-8-29 19:40 编辑
  1. public class test3{
  2.         public static void main(String arg[]){
  3.                 int array[][]=new int [5][];
  4.                 System.out.println(array[1]);//输出结果为null
  5.                 System.out.println(array[1][0]);//这条语句则报错
  6.         }
  7. }
复制代码
为什么声明二维数组时int array[][] = new int [5][];后面的数组中没有写数组长度编译却能通过?
array[1]能够打印出结果为null?而打印array[1][0]的时候程序报错呢?
作者: 黑马杨晨    时间: 2012-8-29 14:09
在我印象中好像int array[][] = new int[5][],如果不填数,默认为零也就是说:默认为array[][] = new int[5][0];  
array[1][0]角标越界了!
作者: 廉伟    时间: 2012-8-29 14:15
为什么声明二维数组时int array[][] = new int [5][];后面的数组中没有写数组长度编译却能通过?
因为二维数组在编译的时候,主动给二维数组加上了初始化值,所以可以通过。
array[1]能够打印出结果为null?而打印array[1][0]的时候程序报错呢?
因为你在打印arr[1]是,你的二维数组没有定义初始化值,他的自己的初始化值是null。而当你去打印array[1][0]是,你的二维数组的最大长度是null他没有长度,0角标位越位了。所以你要打印第一个数组的0角标位的值是不存在的,他要报错。
作者: 王自强    时间: 2012-8-29 15:37
  1. int arr[][] = new int[5][];
  2. for(int[] s : arr)
  3. {
  4. System.out.println(s);
  5. }
复制代码
打印五个 null;
说明初始化了5个长度为0 的一维空数组。
array[1][0]);//array[1]没有角标为0的元素,空指针异常

作者: 魏亮    时间: 2012-8-29 15:48
二维数组中的五个数组全部为空,也就是array这个二维数组包含的5个数组里没有元素,所以在打印array[1][0]时,会报错
作者: 郑世光    时间: 2012-8-29 15:55
语句int array[][] = new int [5][];在内存中定义了一个长度是5的二维数组。数组是引用数据类型,初始化是null。
所以array[0]=array[1]=array[2]=array[3]=array[4]=null。
打印array[1][0]时,你想打印下标为1的一维数组array[1]中的第一个元素,而你的数组还是null,怎么可能打印得了呢!
作者: 黑马_许芸    时间: 2012-8-29 16:20
array[1]是一个指向一维数组int[]的引用类型,你没有给它赋值,所以打印出来结果为null。
array[1][0]本身是一个原生数据类型int。一个原生数据类型(byte,short,int,long,char,boolean,float,double),若它是成员变量,不赋值的话,系统会给它赋默认值。
但是你这里是局部变量,系统不会给它默认值。访问它自然就会出现空指针异常。
你看下面我的例子,因为数组int[][] a 是成员变量,所以我打印a[0][0]结果是默认值0.
  1. public class Test
  2. {
  3.         public int[][] a = new int[2][2];
  4.         public static void main(String[] args)
  5.         {
  6.                 Test test = new Test();
  7.                
  8.                 System.out.println(test.a[0][0]);
  9.         }
  10. }
复制代码

作者: 孙沛    时间: 2012-8-29 19:31
array[1];//输出结果为null,这是因为array数组的第一维已经初始化了,在内存中分配了5个空间,array[1]自然就不会报错,但是你没有赋值,所以返回null
array[1][0];//这条语句则报错,这是因为array数组的第二维,还没有初始化,内存还没有分配空间,array[1][0]指向的意思是指向二维的第一个空间,但是内存没有分配空间,所以报错
作者: 杨千里    时间: 2012-9-7 19:51
多谢 问题已经解决。。。

这是看毕老师数组最后一个视频,看来看去没看懂,原来没认真看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2