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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙新强 中级黑马   /  2012-7-10 17:19  /  1803 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class ExzampleStringBuffere {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
        StringBuffer buf=new StringBuffer("TEST");
        System.out.println(buf);
        System.out.println(buf.length());
        }
}
在这个程序里面打印buf的长度结果是4 这个我知道  StringBuffer在内存中是动态分配空间的 那么加载StringBuffer时内存中具体是怎么处理的?

4 个回复

倒序浏览
这里的长度是按字符算的,一个字符就是一个长度,和集合不一样
所有容器底层都是可变数组
回复 使用道具 举报
StringBuffer内部封装了数组,只要字符串缓冲区所存的长度超出数组长度,就会自动增加数组长度,并把原值加进新的数组.
回复 使用道具 举报
StringBuffer对象包含一个称为缓冲区的内存块,这里可能包含了一个字符串,
也可能没包含,如果包含了字符串
则这个字符串也不一定会占用全部的缓冲区.
因此一个字符串的长度可能与缓冲区的长度不同,缓冲区的长度是StringBuffer的容量.
当你用一个已有的字符串"TEST"生成一个StringBuffer时,其容量是字符串的长度加16.
StringBuffer的容量是不固定的,你可以在创建一个StringBuffer时为其指定容量,如:
StringBuffer buf = new StringBuffer(50);
如果你不指定,那么他默认的容量就是16个字符

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
并且你需要使用的容量是系统自动提供的,它会根据需要再必要的时候予以增大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马