A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itheima01 中级黑马   /  2013-4-14 18:20  /  1787 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师说,数组只能存放对象的引用,不能直接放对象进去。 Student[] stu={new Student(),new Student()},这不是把对象直接放进去了,为什么老师那么说呢。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

正序浏览
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
Student[] stu={new Student(),new Student()},这里面。是存了对象,但是只存对象的地址值,也就是保存在栈中的,指向堆内存的一个引用。地址值存在栈内存里面。而对象存在堆内存里面,其实在平时在在数组里的int等都经过封装后存在堆内存里的。调用数组,就是在调用引用

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
首先对对象你就不明确。
创建一个对象 new A();

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

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

数组中仅仅是保存了一个栈中的一个指向堆空间的一个对象引用。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
易杰 中级黑马 2013-4-14 19:24:06
7#
数组能存储基本数据,也能存储对象,但数组的长度是固定的。数据存储数据时,只能存储同一类型的数据,所以数组存储对象时,只能存储同一类型的对象。
    还有一种能存储对象的容器----集合。集合不能存储基本数据,只能存储对象,但长度不固定。集合存储对象时可以存储不同类型的对象。
回复 使用道具 举报
何旭程 发表于 2013-4-14 18:25
Student[] stu={new Student(),new Student()},由于对象是匿名的,的确无法将对象的引用存入数组,但 ...

Student[] stu={new Student(),new Student()},这个是把对象放数组中了不???还是数组中存放的还是地址??
回复 使用道具 举报
Student[] stu={new Student(),new Student()}
你new了两个student对象 他会在堆内存开辟两个空间  假如它们在内存中的地址分别为0x0012和0x0013;把这两个对象存到数组中时其实就是存的它们的地址,当有了对象的地址就能找到该对象了
回复 使用道具 举报
Student[] stu={new Student(),new Student()},和 Student a = new Student();Student b = new Student();  Student[] stu={a,b}; 是一样的,都是将对象的引用,及在内存中的地址     
区别在于前者匿名  后者有名字   就可以用名字再使用此对象。

可以这么理解  b = new Student();   分等号前与等号后    既然能把“b” 放进去,那么前后相等 “new Student()” 也能放

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

回复 使用道具 举报
Student[] stu={new Student(),new Student()},由于对象是匿名的,的确无法将对象的引用存入数组,但可以将对象的首地址值存入,事实上引用变量里存放的就是对象的首地址值~
回复 使用道具 举报
你的写法相当于以下的写法:
Student[] stu = new Student[2];
stu[0] = new Student();
stu[1]= new Student();
stu[0]和stu[1]是Student对象的引用。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马