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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 940752944 中级黑马   /  2016-6-24 18:33  /  793 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Java中,创建的对象实在堆内存还是在占内存中?

12 个回复

正序浏览
堆内存   多看看教学视频
回复 使用道具 举报
我们首先要知道,在创建一个对象的时候,java会用到内存里面的三个东西
     堆:存放new出来的对象
     栈:存放对象的引用(也就是地址),基本数据类型产生的变量
     常量池:(这个比较特殊)是用来存放String常量,比如“abc”
注意:堆比栈的速度要慢很多
例如:String a=new String(123);
       因为有new,调用了String类的构造,在堆中产生了一个对象,然后在栈中申明了一个引用a,把产生对象的引用赋值给a。
回复 使用道具 举报
new出来的对象在堆中 声明语句在栈中
回复 使用道具 举报
在堆内存的中的 老师说的凡是new出来的 都在堆内存  
回复 使用道具 举报
Ake丶 发表于 2016-6-24 19:25
A a = new A();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a ...

嗯,谢谢
回复 使用道具 举报
Ake丶 中级黑马 2016-6-24 20:06:31
7#
本帖最后由 Ake丶 于 2016-6-24 20:08 编辑
1316582449 发表于 2016-6-24 19:32
方法不存在在堆内存中,是放在代码区,只有在调用的时候,才会构建该方法的运行时环境,包括参数,局部变量 ...
正解。。。。。。。。。
回复 使用道具 举报
940752944 发表于 2016-6-24 19:31
有两个小a,到底哪一个才是引用的

不好意思,写错了。现在已经纠正
回复 使用道具 举报
方法不存在在堆内存中,是放在代码区,只有在调用的时候,才会构建该方法的运行时环境,包括参数,局部变量等,当然,这些也都是在栈内存中的。对内存只存放被new出来的东西。
你可以读读编译原理相关的书,这种问题就清楚了。
回复 使用道具 举报
Ake丶 发表于 2016-6-24 19:25
A a = new a();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a ...

有两个小a,到底哪一个才是引用的
回复 使用道具 举报
本帖最后由 Ake丶 于 2016-6-24 20:19 编辑

A a = new A();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a是局部变量,存放在栈。所在的方法弹出栈,同时也就释放(应该说因为方法在栈运行,所以里面声明的变量也就在栈运行。)
回复 使用道具 举报
syinys7 发表于 2016-6-24 18:40
堆..

上课老师应该画过内存图,凡是"new"出来的都在堆内存里,通过赋值将地址值赋给变量,将栈和堆联系了起来 ...

嗯,谢谢
回复 使用道具 举报
堆..

上课老师应该画过内存图,凡是"new"出来的都在堆内存里,通过赋值将地址值赋给变量,将栈和堆联系了起来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马