stringBuffer 与StringBulider长度分析
来源:互联网 发布:php博客聊天源码 编辑:程序博客网 时间:2024/05/21 05:06
StringBuffer在实现的时候继承了AbstractStringBulider,并实现了序列化,和CharSequece
具体定义如下:
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
private transient char[] toStringCache;
1: public StringBuffer() { // 无参构造方式
super(16);
}
....
2: public StringBuffer(int capacity) { // 指定缓冲区长度
super(capacity);
}
3:public StringBuffer(String str) { // 传入指定字符串
super(str.length() + 16);
append(str);
}
}
对于1与2 实现的都是其父类AbstractStringBulider ()的构造方法,
AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
执行1的时候默认传入16个字节,给父类初始化字节数组。当执行2时会实现如下方法 AbstractStringBuilder(int capacity) {
value = new char[capacity];
}
该方法会指定缓冲区的大小。对于执行3方法时如下:
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
其会在传入长度的基础上添加16个字节的空间。
在使用append()方法在字符串后面进行追加的时候如果长度超过了该字符串的存储空间的大小的时候,就需要进行扩充,
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);// 将字符串复制到指定的字符数组中
count += len; // 使用字符的个数
return this;
}
private void ensureCapacityInternal(int minimumCapacity) {
if (minimumCapacity - value.length > 0)// 判断所追加的字符是否超出字节的缘由空间
expandCapacity(minimumCapacity);
}
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2; // 将原来的空间变为原来的二倍并加2
if (newCapacity - minimumCapacity < 0) // 改变后的空间仍不够
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // 溢出
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE; //赋值为整型最大的值
}
value = Arrays.copyOf(value, newCapacity); // 将原来字符数组的值重新复制到//新增的数组内
}
1:StringBuffer提供了一个字符翻转方法为:reverse();
2:StringBuffer提供的insert()方法,不会覆盖,而是移动元素
3:对于setLength()如果设定的长度小于现存的长度,将只保留原来的部分。
StringBulider在实现的时候继承也了AbstractStringBulider,并实现了序列化,和CharSequece
其空间分配与StringBuffer一模一样。
最大区别在于:
StringBuffer是线程安全的,而StringBulider是线程不安全的。
- stringBuffer 与StringBulider长度分析
- stringbuffer与stringbulider区别
- StringBulider StringBuffer
- stringbuffer stringbulider
- StringBuffer,StringBulider
- String、StringBuffer与StringBulider之间区别
- String,StringBuffer,StringBulider区别与联系
- String 与 StringBuffer 、StringBulider 的区别
- String、StringBuffer与StringBulider之间的区别
- String,StringBuffer与StringBulider三者的区别
- String、StringBulider和StringBuffer
- String ,StringBuffer,StringBulider
- String、StringBulider和StringBuffer
- String,StringBuffer,StringBulider
- String,StringBuffer,StringBulider
- java StringBuffer StringBulider 区别
- StringBulider和StringBuffer笔记
- String StringBuffer StringBulider 区别
- 在Visual Studio 2013 中编写C语言、C++程序
- nyoj 找球号(三) 528 (位运算&&set)
- 超级终端连接开发板出现Please press Enter to activate this console的问题
- tomcat内存不足,一段时间后不响应了
- 字符串NSString和不可变字符串NSMutableString的基础知识
- stringBuffer 与StringBulider长度分析
- Notification--通知
- 基于opencv的相机之图片处理首页效果(六)
- OC语言NSDate的使用以及类的扩展
- 扯扯DNS解析的流程
- Debian系统apt-get命令整理修改更新源
- nyoj--86--找球号(一)(hash&&set&&二分)
- x的平方根(LintCode)
- hdu5093