StringBuffer
①StringBuffer的内容是可变的,在对StringBuffer的内容进行修改时,他
不会产生新的对象,只是在原来的基础上进行修改;
②StringBuffer是线程安全的,同步,效率相对StringBuild来说比较低
③继承了AbstractStringBuilder类
③StringBuffer类里的常用方法解析(按字母排序):
a)方法一:构造方法
ep1:
public StringBuffer() {
super(16);
}
ep2:
public StringBuffer(int capacity) {
super(capacity);
}
ep3:
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
作用:构造方法,创建StringBuffer对象,它不能直接像String那样
(比如:String s="Hello";)直接赋值,它需要经过构造方法来对一个
对象进行赋值;
解释:
ep1:StringBuffer sb1=new StringBuffer();会为对象保留16个字符的扩展空间
ep2: StringBuffer sb2=new StringBuffer(24);创建容量大小为24个字符的对象
ep3:StringBuffer sb3=new StringBuffer("hello");根据String对象创建一个
StringBuffer对象,并会为这个对象额外的保留16个字符空间;
b)方法二:public synchronized StringBuffer append(String str)
//StringBuffer中
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
//AbstractStringBuffer中
public AbstractStringBuilder append(String str) {
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
作用:这是StringBuffer的核心方法,字符串进行拼接时,采用append方法并不会
创建一个新的StringBuffer的对象;
解释:如果追加的数据为一个null,则直接在源对象后面追加null即可;
如果不为空,则先扩大容量,然后改变源对象的值,最后改变源对象的大小
(这个大小指调用length()方法后返回的值)
c)方法三:
//StringBuffer中
public synchronized StringBuffer insert(int offset, String str) {
super.insert(offset, str);
return this;
}
//AbstractStringBuffer中
public AbstractStringBuilder insert(int offset, String str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(value, offset);
count += len;
return this;
}
作用:在指定位置(offset)插入字符串;
解释:先判断参数offset是否为合法下标,如果合法,则执行以下操作,否则,
抛出String下标越界异常(StringIndexOutOfBounsException);
再判断插入的是否为null,如果为null值,则将str="null",准备插入StringBuffer
对象中,如果不为空,则先扩大容量,再插入值,最后改大小,返回插入后的对象值;
④测试String和StringBuffer修改内容的效率
ep1:
String tempstr = "abc";
int times = 5000;
long lstart1=System.currentTimeMillis();
String str ="";
for(int i=0;i<times;i++){
str+=tempstr;
}
long lend1=System.currentTimeMillis();
long time1 = (lend1-lstart1);
System.out.println(time1);
//结果:32
ep2:
String tempstr = "abc";
int times = 5000;
long lstart1=System.currentTimeMillis();
StringBuffer strBuffer =new StringBuffer();
for(int i=0;i<times;i++){
strBuffer.append(tempstr);
}
long lend1=System.currentTimeMillis();
long time1 = (lend1-lstart1);
System.out.println(time1);
}
//结果:0
本文详细介绍了StringBuffer类的特点和使用方法,包括其构造方法、append和insert方法的具体实现过程及性能对比。通过实例演示了如何使用StringBuffer提高字符串操作效率。
4万+

被折叠的 条评论
为什么被折叠?



