社区
Java SE
帖子详情
StringBuffer str = new StringBuffer( 10 ) ;这里的10是str的容量,我要是想在这10个容量里写东西,要怎么写呢?
raymonshi
2009-02-03 05:43:48
这里的10是str的容量,我要是想在这10个容量里写东西,要怎么写呢?不会是10的容量太小吧。
...全文
746
11
打赏
收藏
StringBuffer str = new StringBuffer( 10 ) ;这里的10是str的容量,我要是想在这10个容量里写东西,要怎么写呢?
这里的10是str的容量,我要是想在这10个容量里写东西,要怎么写呢?不会是10的容量太小吧。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kao331431214
2009-02-03
打赏
举报
回复
路过学习
raymonshi
2009-02-03
打赏
举报
回复
写这么多,谢谢啦
xiaobaitu7788
2009-02-03
打赏
举报
回复
嘿嘿
ycnanevol
2009-02-03
打赏
举报
回复
楼上你快我一步... 可以的
ycnanevol
2009-02-03
打赏
举报
回复
你这里定义的10只是初始容量,默认的是16
想往这里写呢,用appand()方法就可以啦
xiaobaitu7788
2009-02-03
打赏
举报
回复
StringBuffer是一个用于存放动态存放字符串数据的类,他继承自java.lang.AbstractStringBuilder这个类。
所谓动态存放是指:你无需考虑StringBuffer大小的问题。
当你利用StringBuffer的append方法向其自身添加字符串的时候,如果此时StringBuffer默认提供的空间大小不够用,
那么它会自动扩展自身的存储空间,以保证数据能够正常的放入到StringBuffer其中。
你刚才在上面写道的 new StringBuffer(10)
我告诉你,StringBuffer默认的存储空间大小是16个字符,也就是说 new StringBuffer() 就等于 new StringBuffer(16),这回知道了吧。
StringBuffer的底层是利用它的父类(AbstractStringBuilder)内部的一个默认长度为16的字符数组来存放数据的。(即:char value[];)
每当你利用 StringBuffer的append方法向其中添加一个字符串的时候StringBuffer都会调用其父类(AbstractStringBuilder)的append方法,
然后AbstractStringBuilder会判断其内部用于存放数据的那个char[]数组是否已经满了,
(1)如果没有满,就会将你传入的字符串转化为
字符并存入到那个字符数组中(即: str.getChars(0, len, value, count);)。
(2)而如果那个char[]数组已经满了,那么AbstractStringBuilder会创建一个大小为当前数组两倍的新的char[]数组。
然后利用System.arraycopy(value, 0, newValue, 0, count);将原始数据拷贝到这个新的数组中即可。
就是这样啦~~
写的我手的疼了。。。
牛年大吉~~
chxy148
2009-02-03
打赏
举报
回复
同意四楼
不善^
2009-02-03
打赏
举报
回复
StringBuffer的好处就是不需要限制它的容量大小,可以节省空间,想加内容就调用StringBuffer类中的append()方法
想删除就调用delete()方法
总之这个类有很多方法很实用你可以去API里看看
ZangXT
2009-02-03
打赏
举报
回复
容量小的话会自己扩大。
mayuanfei
2009-02-03
打赏
举报
回复
str.append("0123456789");
healer_kx
2009-02-03
打赏
举报
回复
str.append("content");
Str
ingBuffer
.append(
str
)之OutOfMemoryError打破砂锅问到底
众所周知
Str
ingBuffer
是安全的,而
Str
ingBuilder是不安全的,他们都有append方法,但具体实现细节你了解过吗?为什么有时候用着用着就OutOfMemoryError,在哪报的 以
Str
ingBuffer
.append(
str
)为例 上图可见,线程安全是因为synchronized,正真的实现调用的是父类犯法 super.append(
str
) 父类核心方法ensureCapacityInternal确保
容量
足够,是怎么确保的呢? ensureCapacityInternal(in
Java
Str
ingBuffer
扩容问题
看下
Str
ingBuffer
的2个构造器和appen()方法: 1、无参构造器,顺便看下父类方法,
new
()了一个长度为16的数组----由此可见,无参够造器默认
容量
是16 public
Str
ingBuffer
() { super(16); } // super()方法调用父类 Ab
str
act
Str
ingBuilder(int capacity) { ...
Str
ing、
Str
ingBuilder、
Str
ingBuffer
Str
ing、
Str
ingBuilder、
Str
ingBuffer
关于Java中
Str
ingBuffer
的capacity问题
从API查到capacity的作用是查看
Str
ingBuffer
的容器
容量
是多少,刚开始纳闷这个跟length的区别在哪?试验了几次感觉有点不解。所以直接跟进源码分析。 直接通过
new
Str
ingBuffer
(
Str
ing
str
);时,capacity是
str
.length+16,从源码可知: 如果直接是
new
Str
ingBuffer
(),则capacity为16
Java字符串三剑客:
Str
ing、
Str
ingBuilder、
Str
ingBuffer
原理与实战选型
字符串拼接是Java基础开发中最常见也最易出错的操作之一,其性能瓶颈往往源于内存分配策略与对象生命周期管理。理解
Str
ing的不可变性设计、
Str
ingBuilder的无锁高效拼接、
Str
ingBuffer
的同步机制,本质是掌握JVM字符串常量池、堆内存布局及字节码生成逻辑。从编译期优化(如+号转
Str
ingBuilder)到运行时扩容(
new
Capacity = old*2+1),再到线程安全模型(synchronized粒度与ThreadLocal替代),技术价值体现在GC压力降低、CPU利用率优化和响
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章