黑马程序员技术交流社区

标题: 新手问个数组的小问题???、 [打印本页]

作者: Gaara    时间: 2013-1-26 16:04
标题: 新手问个数组的小问题???、
本帖最后由 张向辉 于 2013-1-27 13:43 编辑

Students[] stu = new Students[3];这么写是不是对数组本身实例化?

stu[0]=new Students();是不是对数组中的元素实例化?

还有 这两句在内存中是怎么回事那??
作者: 黄锦成    时间: 2013-1-26 16:29
画了个内存图,你参考参考

未命名.PNG (31.8 KB, 下载次数: 47)

未命名.PNG

作者: Gaara    时间: 2013-1-26 18:02
黄锦成 发表于 2013-1-26 16:29
画了个内存图,你参考参考

貌似懂了  又貌似没懂  先谢谢你了!!  我怎么就画不出来那!!!!
作者: 洪建超    时间: 2013-1-26 18:09
Students[] stu = new Students[3];这一步叫实例化,实例化是只在内存中给对象分配一个存储空间,不是指赋值。
students[0]=new Student();这个的意思就是创造了一个Student类型的数据,并装入数组的第一个元素位引用类型的数据都是在堆上开辟空间,如果是null值,则是未开辟空间,这时候,这个类型的数据实际上是不存在的,也就是空指针,如果你直接使用他的字段,会抛空指针异常.
new Students();会在堆上生成一个对象,消耗一个对象的空间;stu[0]是对象的一个引用,一个引用消耗的空间就是一个Int数据,很小的,;stu[0]=XXX 表示的是让这个引用指向XXX对象.
作者: 黄锦成    时间: 2013-1-26 18:31
张文彬 发表于 2013-1-26 18:02
貌似懂了  又貌似没懂  先谢谢你了!!  我怎么就画不出来那!!!!

这个我也纠结了挺长时间的,弄了很久才弄清楚了。这个你可以看毕老师基础视频中画的内存图
作者: Gaara    时间: 2013-1-26 18:38
洪建超 发表于 2013-1-26 18:09
Students[] stu = new Students[3];这一步叫实例化,实例化是只在内存中给对象分配一个存储空间,不是指赋 ...

看你这个  再结合上面那个图  貌似又懂点了  我再琢磨琢磨  谢谢!!
作者: Gaara    时间: 2013-1-26 18:38
黄锦成 发表于 2013-1-26 18:31
这个我也纠结了挺长时间的,弄了很久才弄清楚了。这个你可以看毕老师基础视频中画的内存图 ...

恩  谢谢了  我再好好看看
作者: chuanyueing    时间: 2013-1-26 22:15
第一个解释的不错
作者: Gaara    时间: 2013-1-27 14:22
Hmtimetravel 发表于 2013-1-26 22:15
第一个解释的不错

这个你都懂 。。。。。哈哈




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