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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹亚辉 中级黑马   /  2016-9-9 13:50  /  835 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有没有知道,StringBuffer在创建对象的时候,建立了几个对象,在堆里面和常量池里面,是怎么建立的,怎么修改过之后,在常量池里面的是释放了还是,一直存在。

5 个回复

正序浏览
StringBuffer可以和String相互转换
回复 使用道具 举报
StringBuffer在创建对象的时候,在堆内存中创建一个对象。不会再常量池中创建对象。
回复 使用道具 举报
StringBuffer在new的时候会在堆内存建立 一个对象 ,如果是:new StringBuffer("abc")这时就是建立两个对象了,常量“abc”放在常量池中,如果是修改对象的话,要看你引用有没有再使用,没有的话,就看回收 机制几时回收了,如是还 在使用这个引用的 话,就一直存在
回复 使用道具 举报
比如StringBuffer sb = new StringBuffer("abc"); 这一句在堆内存中new 了一个对象,在常量池中创建了一个常量对象"abc",放到堆内存中,所以共2个对象,存在多久跟垃圾回收器有关。。。。。我是这么认为。。。
回复 使用道具 举报
常量池中的一直存在,StringBuffer是new出来的,所以在堆中,里面维护了一个可变长度的数组,通过append将新的字符串追加在后面,这个过程只在常量池中产生追加的常量,不去产生追加前的常量,,我是这么理解的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马