黑马程序员技术交流社区

标题: 关于StringBuffer [打印本页]

作者: 曹亚辉    时间: 2016-9-9 13:50
标题: 关于StringBuffer
有没有知道,StringBuffer在创建对象的时候,建立了几个对象,在堆里面和常量池里面,是怎么建立的,怎么修改过之后,在常量池里面的是释放了还是,一直存在。
作者: gjf821687    时间: 2016-9-9 14:14
常量池中的一直存在,StringBuffer是new出来的,所以在堆中,里面维护了一个可变长度的数组,通过append将新的字符串追加在后面,这个过程只在常量池中产生追加的常量,不去产生追加前的常量,,我是这么理解的。
作者: 愿望变美    时间: 2016-9-9 23:20
比如StringBuffer sb = new StringBuffer("abc"); 这一句在堆内存中new 了一个对象,在常量池中创建了一个常量对象"abc",放到堆内存中,所以共2个对象,存在多久跟垃圾回收器有关。。。。。我是这么认为。。。
作者: zhoubinjian    时间: 2016-9-9 23:56
StringBuffer在new的时候会在堆内存建立 一个对象 ,如果是:new StringBuffer("abc")这时就是建立两个对象了,常量“abc”放在常量池中,如果是修改对象的话,要看你引用有没有再使用,没有的话,就看回收 机制几时回收了,如是还 在使用这个引用的 话,就一直存在
作者: cjc147    时间: 2016-9-10 00:09
StringBuffer在创建对象的时候,在堆内存中创建一个对象。不会再常量池中创建对象。
作者: SunCowbee    时间: 2016-9-10 00:44
StringBuffer可以和String相互转换




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