StringBuilder类和StringBuffer类,线程安全问题和选择
2015-06-19 09:48
441 查看
StringBuilder类的构造方法有很多,主要是参数上的区别,常用的方法有:
1.StringBuilder append(String str)方法
该方法将参数str指定的字符串追加到字符串生成器中,语法格式为:
builder.append(String str);
使用StringBuilder append(String str)方法将字符串追加到字符串生成器中的代码如下:
输出结果是追加后builder的值是good.
2.StringBuilder append(StringBuffer sb)方法
该方法将参数sb指定的字符串缓存StringBuffer的值追加到字符串生成器中,语法格式为:
builder.append(StringBuffrer sb);
使用该方法将字符串缓存中的值追加到字符串生成器中,代码如下:
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()方法
该方法将字符生成器中的值转换为字符串
如:
将字符串生成器中的值转换成了字符串类型,并且知道转换之后字符串生成器中的值不变。
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
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
相关文章推荐
- IOS中UIScrollView和UIPageControl的联合运用
- SQL Server 系统表介绍:sys.dm_exec_requests
- IQueryable和IEnumerable的区别
- request 获取参数
- 为Angular-UEditor增加工具栏属性
- NGUI 的ScrollView如何让item居中
- 【Android开发经验】Android举UI设计经验
- 【iOS】UIStackView官方文档翻译
- SQL Server查询计划sys.dm_exec_text_query_plan
- UGUI 实现文本打字效果
- UITableView学习笔记
- Leetcode Implement stack using queues
- [Druid:数据库连接池] removeAbandoned 功能引发的血案 避免单业务执行时间超时
- UIScrollView的使用大全
- leetcode 225: Implement Stack using Queues
- EasyUI上传图片,前台预览,后台读取
- Nearest Sequence(lcs)
- Lucene知识总结(Query篇)
- BlockingQueue的使用
- 成为设计师的五项技能!第一招~~