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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值