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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fiend 中级黑马   /  2012-7-28 10:13  /  1500 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个问题想得不是很明白,一般都说new一个对象,那这个这对象就放在堆中的,然后是局部变量都
放在栈里面的,可是如果局部变量的赋值也是new出来的,那它还是放在栈内存里吗?费解,求正解。。。。

3 个回复

倒序浏览
栈内存的特点:存储都是局部变量 ( 函数参数,函数内定义的变量,语句中定义的变量)。变量一旦使用完(作用域结束),就会在栈内存中自动释放。堆:存储的是实体(数组和对象,只要是new的,都在堆中).
堆内存的特点:
1,堆内存中的实体都有首内存地址值.
2,堆内存中的变量都有默认初始化值.
3,对于没有任何引用变量指向的实体,会视为垃圾,会被垃圾回收机制所回收。

回复 使用道具 举报
局部变量如果赋值是new出来的话,这个值就是new的这个对象在堆内存中得地址值,这个变量只是对象的一个引用,所以它还是存放在栈内存中,毕老师前面课程讲了好多遍,仔细听一下就会明白的。
回复 使用道具 举报
对象存储在堆中,声明在存储在栈中。只要有new关键字的都存放在堆内存
堆的优势是可以动态地分配内存大小,栈的优势是存取速度比堆要快,栈可以实现数据共享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马