黑马程序员技术交流社区
标题:
两个内存的问题:构造函数和对象
[打印本页]
作者:
李会成
时间:
2013-2-15 15:22
标题:
两个内存的问题:构造函数和对象
本帖最后由 李会成 于 2013-2-18 11:27 编辑
创建对象并对构造函数初始化时,构造函数是在方法区中还是在栈内存中。还有对象是不是只能在堆内存中。如String s = new("abc");大家都知道这语句执行完之后有两个对象。看见有的人说s是在栈内存中对象。
希望有大侠懂内存帮忙指导。
作者:
黄玉昆
时间:
2013-2-15 18:06
方法区,顾名思义,是存放方法的地方,也就是你的那些方法代码是存放在这里的,包括构造函数。对于栈内存,一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。对于堆内存,是存放由new创建的对象和数组(数组特殊点,你可以查查有关数组存放位置的资料)。
这句String s = new("abc");中,s是存在与栈内存中的,而new出的"abc"在字符串池中有一个"abc"对象,在堆内存中有一个"abc"对象,具体为什么请看下面的文章。我把我画的图也放在下面,你可以看看,我的理解,不一定对,你以后慢慢对内存这多了解了解就明白了。
文章地址:http://blog.csdn.net/shengfeixiang/article/details/8572749
String赋值图.PNG
(36.52 KB, 下载次数: 27)
下载附件
2013-2-15 18:05 上传
作者:
冯佩
时间:
2013-2-15 20:43
构造函数和其它函数一样存在于方法区中,不同的是,其它方法被调用是在栈内存中开辟空间,而访问构造函数创建对象则是直接在堆内中存中开辟空间,String s = new ("abc");这其中有两个对象,每个字符串都是String类的一个实例对象。Sting类在内存中有个常量池,也就是个数组。"abc"作为一个实例对象就是存在于这个常量池中,而new ("abc")这个对象则是存在于堆内存中,因为通过new建立的实例都存放在堆内存中。s是存在于栈内存中的类类型变量。
作者:
李培根
时间:
2013-2-18 11:23
请勿复制他人帖子,技术分不是入学的门槛而是为了帮助大家学习而存在的。
请勿再次发此类帖子了!
此贴就关闭了。此后如有再次发现直接封禁处理,请看到此贴的会员也加以注意。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2