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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiwangliujiao 黑马帝   /  2012-4-26 10:04  /  2150 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果不是匿名对象,在栈中的地址指向堆内存,如果是匿名对象,在堆内存中是有地址的,可是在栈内存中是怎么处理的?有这个地址对应的吗?

4 个回复

倒序浏览
匿名对象用完一次之后,就无法再使用它了。对于没有任何引用指向它的对象,就会变成一个垃圾资源
在适当的时候,垃圾回收机制就会回收它
回复 使用道具 举报
匿名对象有两种使用情况:
1.如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。
2.将匿名对象作为实参传递给一个方法调用。
这样用过之后在适当的时候,垃圾回收机制就会回收它。不需要有栈地址对应。
回复 使用道具 举报
从内存关系之中可以看出来,实际上所有的内容都是在堆中保存的,也就是说堆才是真正所需要的内容。

所以所谓的匿名对象,就是使用的堆空间,对空间通过关键字new进行开辟。

但是这个时候也有一个问题需要注意了,既然匿名对象本身没有名字,则肯定没有对应的栈内存空间引用,则此对象只能使用一次。

以后只使用一次的对象就通过匿名对象表示,匿名对象使用完成之后将会等待JVM进行垃圾的收集。
回复 使用道具 举报
匿名对象跟普通对象创建过程一样,只是在栈中没有一个变量去指向它,
栈中变量记住的是对象的地址,而匿名对象也是有地址的;
匿名对象和普通对象生命周期一样,只是普通对象可以通过变量多次引用;而匿名对象则等待虚拟机回收;
我们只是用一次的对象可以用匿名对象;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马