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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李深山 中级黑马   /  2012-3-19 21:24  /  1730 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Hello
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
       Person p = new person();
        }
}
Class Person{}
堆和栈有什么变化,内存中有什么变化?

4 个回复

倒序浏览
"Hello World"存放在数据区(data segment),p存放在栈内存中,指向堆内存中new出来的Person对象
回复 使用道具 举报
p存放在栈中             new person()存在堆中
(画图的时候让人抢先回答了)
不明白上图
http://bbs.itheima.com/forum.php?mod=attachment&aid=MTIwM3w2MGYwZGQ1NWY2NDBlOWU4YmU3MTc2OTlhNTMzYTY4ZXwxNzMxMzE2NzU0&request=yes&_f=.jpg

未命名.jpg (28.39 KB, 下载次数: 66)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1 P拿的是对象的地址值,这点很关键.

查看全部评分

回复 使用道具 举报
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.
在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中.
在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
1. new创建一个对象,放在堆内存中
2. p属于引用型,存放在栈内存中
3. hello world存放在数据区中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马