您的位置:首页 > 产品设计 > UI/UE

StringBuilder类和StringBuffer类,线程安全问题和选择

2015-06-19 09:48 441 查看
StringBuilder类的构造方法有很多,主要是参数上的区别,常用的方法有:

1.StringBuilder append(String str)方法

该方法将参数str指定的字符串追加到字符串生成器中,语法格式为:

builder.append(String str);

使用StringBuilder append(String str)方法将字符串追加到字符串生成器中的代码如下:

string s = "well";
StringBuilder builder = new StringBuilder();
bulider.append(s);
system.out.println("追加后builder的值是:"+builder);


输出结果是追加后builder的值是good.

2.StringBuilder append(StringBuffer sb)方法

该方法将参数sb指定的字符串缓存StringBuffer的值追加到字符串生成器中,语法格式为:

builder.append(StringBuffrer sb);

使用该方法将字符串缓存中的值追加到字符串生成器中,代码如下:

StringBuffer buffer = new StringBuffer("sunday");
StringBuffer builder = new StringBuilder();
builder.append(buffer);
System.out.println("追加后builder的值是:"+builder);


3.StringBuilder insert(int offset , String str)方法

该方法将参数指定的字符串str添加到offset指定的位置,语法格式如下:

builder.inset(int offest , String str);

4.StringBuilder delete(int start,String end)方法

该方法移除字符串生成器中的子字符串中,该子字符串从指定的start处开始,到指定的end处结束,语法格式:

builder.delete(int start,String end);

5.String toString()方法

该方法将字符生成器中的值转换为字符串

如:

StringBuilder builder = new StringBuilder("HelloWord");
String s = builder.tostring;
System.out.println("s="+s);
System.out.println("builder="+builder);


将字符串生成器中的值转换成了字符串类型,并且知道转换之后字符串生成器中的值不变。

StringBuffer类

该类能创建可修改的字符串序列,也是由append()追加一个字符串序列。

构造方法有:

StringBuffer(),StringBuffer(int size)和StringBuffer(String s)。

StringBuffer()创建一个StringBuffer对象,分配给该对象的实体的初始容量可以容纳16个字符,该对象的实体存放的字符序列的长度大于16时,实体的初始容量自动增加,以便存放所增加的字符。StringBuffer对象可以通过方法length()获取实体中存放的字符序列的长度,通过方法capacity()获取当前实体的实际容量。

StringBuffer(int size)创建一个StringBuffer对象,可以指定分配给该对象的实体的初始容量为参数size指定的个数。

StringBuffer(String s)创建一个StringBuffer对象,可以指定分配给该对象的实体的初始容量为参数字符串s的长度额外再加16个字符。

常用方法有:

1.append() ——追加字符串

2.char charAt(int n) ——得到参数n指定的位置上的单个字符。

3.void setCharAt(int n ,char ch)——将当前Stringbuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。

4.StringBuffer inset(int index,String str)——将一个字符串插入另一个字符串中,并返回当前对象的引用。

5.public StringBuffer reverse()——将对象实体中的字符翻转,并返回当前对象的引用。

6.StringBuffer delete(int startIndex,int endIndex)——从当前StringBuffer对象实体中的字符串中删除一个子字符串,并返回当前对象的引用。

7.StringBuffer replace(int startIndex,int endIndex, String str)——将当前StringBuffer对象实体中的字符串的一个子字符串用参数str指定的字符串替换。

StringBuffer与Stringbuilder区别:

StringBuffer是线程安全的,所以当它作为成员变量时不存在线程安全问题。

StringBuilder是线程不安全的,在作为成员变量时有可能出现线程不安全问题。如果在方法内部使用一个这样的变量,用StringBuilder效率会更高,因为首先StringBuilder没有加锁,其次方法内部不存在线程安全问题。

选择方法:

如果经常修改,且是单线程,使用StringBuilder;(实际上,StringBuilder是我们最常用的,因为我们经常需要修改字符串,并且我们的程序多是单线程的)

如果经常修改,且是多线程,使用StringBuffer
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: