黑马程序员技术交流社区

标题: Java对象的问题 [打印本页]

作者: 940752944    时间: 2016-6-24 18:33
标题: Java对象的问题
Java中,创建的对象实在堆内存还是在占内存中?

作者: syinys7    时间: 2016-6-24 18:40
堆..

上课老师应该画过内存图,凡是"new"出来的都在堆内存里,通过赋值将地址值赋给变量,将栈和堆联系了起来
作者: 940752944    时间: 2016-6-24 18:43
syinys7 发表于 2016-6-24 18:40
堆..

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

嗯,谢谢
作者: Ake丶    时间: 2016-6-24 19:25
本帖最后由 Ake丶 于 2016-6-24 20:19 编辑

A a = new A();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a是局部变量,存放在栈。所在的方法弹出栈,同时也就释放(应该说因为方法在栈运行,所以里面声明的变量也就在栈运行。)

作者: 940752944    时间: 2016-6-24 19:31
Ake丶 发表于 2016-6-24 19:25
A a = new a();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a ...

有两个小a,到底哪一个才是引用的
作者: 1316582449    时间: 2016-6-24 19:32
方法不存在在堆内存中,是放在代码区,只有在调用的时候,才会构建该方法的运行时环境,包括参数,局部变量等,当然,这些也都是在栈内存中的。对内存只存放被new出来的东西。
你可以读读编译原理相关的书,这种问题就清楚了。
作者: Ake丶    时间: 2016-6-24 20:04
940752944 发表于 2016-6-24 19:31
有两个小a,到底哪一个才是引用的

不好意思,写错了。现在已经纠正
作者: Ake丶    时间: 2016-6-24 20:06
本帖最后由 Ake丶 于 2016-6-24 20:08 编辑
1316582449 发表于 2016-6-24 19:32
方法不存在在堆内存中,是放在代码区,只有在调用的时候,才会构建该方法的运行时环境,包括参数,局部变量 ...
正解。。。。。。。。。
作者: 940752944    时间: 2016-6-24 20:16
Ake丶 发表于 2016-6-24 19:25
A a = new A();a是引用数据类型,存放的是实际对象的地址值,
new 出来的对象在堆里存放着。
引用数据类型a ...

嗯,谢谢
作者: lifeiwangyue    时间: 2016-6-24 20:19
在堆内存的中的 老师说的凡是new出来的 都在堆内存  
作者: 李胜贤    时间: 2016-6-24 20:36
new出来的对象在堆中 声明语句在栈中
作者: 1316582449    时间: 2016-6-25 14:12
我们首先要知道,在创建一个对象的时候,java会用到内存里面的三个东西
     堆:存放new出来的对象
     栈:存放对象的引用(也就是地址),基本数据类型产生的变量
     常量池:(这个比较特殊)是用来存放String常量,比如“abc”
注意:堆比栈的速度要慢很多
例如:String a=new String(123);
       因为有new,调用了String类的构造,在堆中产生了一个对象,然后在栈中申明了一个引用a,把产生对象的引用赋值给a。
作者: 孟小垚    时间: 2016-6-25 19:50
堆内存   多看看教学视频




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2