StringBuilder和StringBuffer源码浅析
来源:互联网 发布:mac 远程登录 编辑:程序博客网 时间:2024/05/16 08:51
首先我们来看两个类的继承体系:
public final class StringBuilder extends AbstractStringBuilder implements Appendable, CharSequence, Serializable;public final class StringBuffer extends AbstractStringBuilder implements Appendable, Serializable, CharSequence
二者基本类似,我们看AbstravtStringBuilder这个类
private char[] value; static final int INITIAL_CAPACITY = 16; AbstractStringBuilder() { value = new char[INITIAL_CAPACITY]; } AbstractStringBuilder(int capacity) { if (capacity < 0) { throw new NegativeArraySizeException(Integer.toString(capacity)); } value = new char[capacity]; } AbstractStringBuilder(String string) { count = string.length(); shared = false; value = new char[count + INITIAL_CAPACITY]; string.getCharsNoCheck(0, count, value, 0); }
默认初始容量为16,当然我们也可以自己设置容量大小;接着我们看看拼接过程
final void append0(char[] chars) { int newCount = count + chars.length; if (newCount > value.length) { enlargeBuffer(newCount); } System.arraycopy(chars, 0, value, count, chars.length); count = newCount; }
接下来我们看看扩容过程,
void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); }
尝试将新容量扩为大小变成2倍+2 ,容量如果不够,直接扩充到需要的容量大小。所以我们在创建SB的时候,可以估算新字符串的长度来适当避免多次扩容,影响效率。
接着我们来看看StringBuffer的append方法
public synchronized StringBuffer append(char[] chars) { append0(chars); return this; }
和StringBuilder的append方法
`
public StringBuilder append(char c) {
append0(c);
return this;
}
这就是一个线程安全而另一个线程不安全的原因`
0 0
- StringBuilder和StringBuffer源码浅析
- 浅析StringBuilder和StringBuffer
- StringBuffer和StringBuilder实现浅析
- StringBuilder和StringBuffer源码分析
- 【源码】StringBuilder和StringBuffer源码深度剖析
- 【源码】StringBuilder和StringBuffer源码深度剖析
- String、StringBuffer、StringBuilder浅析
- JDK源码解析之StringBuilder和StringBuffer
- Java StringBuilder 和 StringBuffer 源码分析
- CharSequence,String ,Stringbuilder和StringBuffer源码分析
- 通过源码分析String、StringBuffer和StringBuilder
- Java StringBuilder和StringBuffer源码分析
- Java源码阅读-StringBuffer和StringBuilder
- String和StringBuffer StringBuilder源码分析
- Stringbuffer与Stringbuilder源码学习和对比
- StringBuffer、StringBuilder源码分析
- String StringBuffer StringBuilder区别浅析
- StringBuffer和StringBuilder的区别与联系(源码级)
- 如何使用Git上传项目代码到github 此博文包含图片
- EZ-USB FX2 LP CY7C68013A 开发基本概念
- 关于智能提示(intellisense)重复(aardio)
- 当遇到"500 Internal Server Error"后
- 优化页面响应时间之动态页面静态化
- StringBuilder和StringBuffer源码浅析
- Objective-C基础笔记二
- PHP注册页面实现
- hdu_1254_推箱子(双BFS)
- 会了这些单词,开发起来如虎添翼
- 1.2.2 网络抓包工具之:Charles
- andorid jni入门教程一之helloworld
- Objective-C基础笔记三
- WampServer环境下的站点配置