StringBuffer
目录
1.概述
类 | 值 | ||
---|---|---|---|
String | 不可变(private final char value[]) | ||
StirngBuffer | 可变(char[] value) | 安全 | 多线程操作字符串 |
StringBuilder(Java5) | 可变(char[] value) | 不安全(不能同步访问) | 单线程操作字符串 |
-
使用String对字符串修改时,会返回新的字符串对象,在内存中会留下副本,若放在循环中,会大大降低程序效率这时,就可以使用StringBuffer与Stringbuilder
-
StringBuilder较于StringBuffer有速度优势,多数情况推荐使用StringBuilder
-
当程序要求线程安全时,使用StringBuffer,适用多线程下在字符缓冲区进行大量操作的情况
2.示例
StringBuffer s1 = new StringBuffer(5);
/*
public StringBuffer(int capacity) {
super(capacity);
}
value = new char[capacity];
*/
StringBuffer s2 = new StringBuffer();
/*
public StringBuffer() {
super(16);
}
*/
//添加
//append(): return this; 改变的是value数组,不创建新对象
s1.append("abcde");
s1.append("12345");
s1.append("abcde");
s1.append("12345");
s1.append("abcde");
System.out.println("append:"+s1);
//insert(): return this;
s2.insert(0,"hello word");
System.out.println("insert:"+s2);
//删除 return this;
s1.delete(5,10);//删除指定区间的字符串:start(包括),end(不包括)
//s2.deleteCharAt(0);//删除指定位置的字符
System.out.println("delete:"+s1);
//替换
// return this;
s1.replace(0,5,"hello");
System.out.println("replace:"+s1);
//反转字符串
s2.reverse();
System.out.println("reverse;"+s2);
/*
输出:
append:abcde12345abcde12345abcde
insert:hello word
delete:abcdeabcde12345abcde
replace:helloabcde12345abcde
reverse;drow olleh
*/
-
StringBuffer与StringBuilder的操作方法完全相同.
-
StringBuffer与StringBuilder继承了同一个父类,实现了相同的接口
-
StringBuffer添加了synchronized同步锁,多线程安全,StringBuilder没有synchronized同步锁
/* StringBuffer
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
*/
/* StringBuilder
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
*/
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15646.html