黑马程序员技术交流社区

标题: 数组的初始化问题 [打印本页]

作者: 田磊阳    时间: 2013-3-19 15:36
标题: 数组的初始化问题
本帖最后由 田磊阳 于 2013-3-19 18:17 编辑

定义数组如果没有初始化,系统就会自动初始化为0。为什么毕老师视频中写的是null呢

作者: VOIDMAIN    时间: 2013-3-19 15:54
初始化的目的不是给数组一个0吧,0已经是具体的值了,初始化时,数组为null是合理的。
作者: 丁一    时间: 2013-3-19 16:00
初始时 是0 还是null要看定义的具体类型
如果是int 的默认是0
如果字符串的就是null

主要看数据类型  
作者: 续圆凯    时间: 2013-3-19 16:02
初始化,还未分配堆内存空间时,应该是null

比如定义一个String类型的变量
在成员变量的定义中,String s;等同于String s=null;
而在本地变量(方法变量)的定义中,String s;不等同于String s=null;,这时要使用s必须显式地赋值。
作者: 田磊阳    时间: 2013-3-19 16:26
已经解决了,是我看错了,如果是一维数组在没有初始化时,输出的为0
如:
   int[ ] x = new int[3];
     System.out.println([1]);
     输出结果应该是0;

而毕老师那边是二维数组
    int[ ] [ ] x = new int[3] [ ];
     System.out.println( [0] );
输出结果为null,因为System.out.println( [0] );表示是输出二维数组中的第一个一维数组,而数组是属于引用数据类型,所以在没有初始化的时候,输出为null

另外补充一点:

int类型没有初始化,输出的结果为0
double类型没有初始化,输出的结果为0.0
float类型没有初始化,输出的结果为0.0f
boolean类型没有初始化,输出的结果为false

作者: 田磊阳    时间: 2013-3-19 16:31
经过学习数组初始化问题,我又发现一个知识点,那就是:把数组初始化为0是在编译时完成的
作者: 张亚青    时间: 2013-3-19 17:08
1、在java语言中,数组就是一个对象,所以创建数组与创建对象一样也是用new关键字来创建。举个例子,s = new char[20];
2、数组在被创建后,其元素被系统自动初始化了。字符元素被初始化为‘\u0000’,而对于对象数组都被初始化为null。 如果你不初始化的话,在内存是找不到它的位置的。
作者: 顾传文    时间: 2013-3-19 17:29
本帖最后由 顾传文 于 2013-3-19 17:34 编辑

数组的初始化时将基本数据类型初始化对应的值,如int初始化为0,boolean初始化为false。
如果是引用数据类型将每个元素初始化为null。
比如:arrayList集合底层数据结构就是数组,在new ArrayList集合的实例对象时,就会创建一个数组。根据数组的初始化功能,其实ArrayList里面已经有元素了。只是因为ArrayList有个size属性,我们没有往ArrayList添加元素时,虽然集合内部有元素,但是size属性值为0,所以我们没法取ArrayList中的第一个元素。




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