黑马程序员技术交流社区

标题: 关于数组和对象 [打印本页]

作者: itheima01    时间: 2013-4-14 18:20
标题: 关于数组和对象
老师说,数组只能存放对象的引用,不能直接放对象进去。 Student[] stu={new Student(),new Student()},这不是把对象直接放进去了,为什么老师那么说呢。
作者: 王洪宇    时间: 2013-4-14 18:25
你的写法相当于以下的写法:
Student[] stu = new Student[2];
stu[0] = new Student();
stu[1]= new Student();
stu[0]和stu[1]是Student对象的引用。

作者: 何旭程    时间: 2013-4-14 18:25
Student[] stu={new Student(),new Student()},由于对象是匿名的,的确无法将对象的引用存入数组,但可以将对象的首地址值存入,事实上引用变量里存放的就是对象的首地址值~
作者: Alan    时间: 2013-4-14 18:33
Student[] stu={new Student(),new Student()},和 Student a = new Student();Student b = new Student();  Student[] stu={a,b}; 是一样的,都是将对象的引用,及在内存中的地址     
区别在于前者匿名  后者有名字   就可以用名字再使用此对象。

可以这么理解  b = new Student();   分等号前与等号后    既然能把“b” 放进去,那么前后相等 “new Student()” 也能放
作者: 沈浩    时间: 2013-4-14 18:44
Student[] stu={new Student(),new Student()}
你new了两个student对象 他会在堆内存开辟两个空间  假如它们在内存中的地址分别为0x0012和0x0013;把这两个对象存到数组中时其实就是存的它们的地址,当有了对象的地址就能找到该对象了
作者: itheima01    时间: 2013-4-14 18:44
何旭程 发表于 2013-4-14 18:25
Student[] stu={new Student(),new Student()},由于对象是匿名的,的确无法将对象的引用存入数组,但 ...

Student[] stu={new Student(),new Student()},这个是把对象放数组中了不???还是数组中存放的还是地址??
作者: 易杰    时间: 2013-4-14 19:24
数组能存储基本数据,也能存储对象,但数组的长度是固定的。数据存储数据时,只能存储同一类型的数据,所以数组存储对象时,只能存储同一类型的对象。
    还有一种能存储对象的容器----集合。集合不能存储基本数据,只能存储对象,但长度不固定。集合存储对象时可以存储不同类型的对象。
作者: 王大斌    时间: 2013-4-14 19:30
首先对对象你就不明确。
创建一个对象 new A();

A  a  =new A();
其实a是只是地址空间的引用。

对象在堆中创建
而引用在栈中。建议学习数据结构

数组中仅仅是保存了一个栈中的一个指向堆空间的一个对象引用。
作者: 。。。。。。    时间: 2013-4-14 19:51
Student[] stu={new Student(),new Student()},这里面。是存了对象,但是只存对象的地址值,也就是保存在栈中的,指向堆内存的一个引用。地址值存在栈内存里面。而对象存在堆内存里面,其实在平时在在数组里的int等都经过封装后存在堆内存里的。调用数组,就是在调用引用
作者: 黄玉昆    时间: 2013-4-14 22:41
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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