String,StringBuffer,StringBuilder 三者之间的区别是什么?
2016-05-10 14:09
761 查看
1.String 字符串产量
2.StringBuffer 字符串变量(线程安全)
3.StringBuilder 字符串变量 (非线程安全)
1.String类型,是java内的对象,是不可改变的对象,当每次对String进行改变时,都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里,不断的改变一个对象,就要不断的生成新的对象,如果对象多了,java的垃圾自动回收机制会开始工作了,所以效率很低,建议在不断更改String对象的地方不要使用String类型。
2.StringBuffer是个可变的对象,就是每次操作都是对对象本身进行操作,而不用生成新的对象,这样效率就会有很大的提高,在大部分情况下StringBuffer的效率要比String类型更高。
3.StringBuilder与StringBuffer一样是个可变的字符序列,提供与StringBuffer兼容的API,但是不能保证同步,
在用在字符串缓冲区被当作线程的情况使用,在单机非多线程的情况下使用StringBuilder会有比较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,StringBuild会在多线程下被操作,要改用Stringbuffer,让对象自行管理同步问题。
总结:StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问他,不存在不安全的因素了,则用StringBuilder。
如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用那么最好用StringBuffer
2.StringBuffer 字符串变量(线程安全)
3.StringBuilder 字符串变量 (非线程安全)
1.String类型,是java内的对象,是不可改变的对象,当每次对String进行改变时,都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里,不断的改变一个对象,就要不断的生成新的对象,如果对象多了,java的垃圾自动回收机制会开始工作了,所以效率很低,建议在不断更改String对象的地方不要使用String类型。
2.StringBuffer是个可变的对象,就是每次操作都是对对象本身进行操作,而不用生成新的对象,这样效率就会有很大的提高,在大部分情况下StringBuffer的效率要比String类型更高。
3.StringBuilder与StringBuffer一样是个可变的字符序列,提供与StringBuffer兼容的API,但是不能保证同步,
在用在字符串缓冲区被当作线程的情况使用,在单机非多线程的情况下使用StringBuilder会有比较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,StringBuild会在多线程下被操作,要改用Stringbuffer,让对象自行管理同步问题。
总结:StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问他,不存在不安全的因素了,则用StringBuilder。
如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用那么最好用StringBuffer
相关文章推荐
- iOS之UI学习-UITextField代理篇
- 第十三章 UIGestureRecognizer and UIMenuController翻译
- 盖得化工----requests/bs4---采集二级网址
- PAT1017. Queueing at Bank
- Java容器:PriorityQueue
- 46. Permutations && 47. Permutations II && 31. Next Permutation && 60. Permutation Sequence && 77. Combinations
- 使用easyui时遇到的问题
- 关于uinavigationcontroller跳转时,若跳转到的页面不需要navigationbar,则总显示黑框的处理办法
- Mesh绘制雷达图(UGUI)
- Mesh绘制雷达图(UGUI)
- iOS开发UITableViewCell的选中时的颜色设置(转)
- 【Moqui框架】Moqui连接各种类型的数据库
- 【Arduino官方教程第一辑】示例程序 3-5 模拟信号的校准
- PAT1007 Maximum Subsequence Sum (25)
- UIAlertViewController
- Android更新主线程UI的两种方式handler与runOnUiThread()
- UE4 Pak包加载
- kbuild的makefile模板
- UITabBarController使用
- String,StringBuffer与StringBuilder的区别??