小白学习之路(一):stringbuilder ,stringbuffer,string区别
2015-06-22 22:52
513 查看
个人学习记录,如有错误,欢迎大家纠正。
最近在看jdk源码,发现stringbuilder和stringbuffer的方法大多数都类似,且都继承了AbstractStringBuilder类。一时比较混乱,弄不清楚两者区别与联系。于是从网上看了其他人的指导,有自己的理解。
stringbuffer 和stringbuilder都是常用的对字符串操作的类,通过读源码可知,其根本还是对一字符数组进行一系列操作(String类实际上也是如此)。而他们之间的一些区别就是在有些同名的方法如append,方法体都是调用父类AbstractStringBuilder类的append方法,但是在stringbuffer的append方法方法签名有synchronized保留字,意味着每次只有一个线程能进入这个方法执行,因此保证了stringbuffer类的append方法的线程安全性。其他方法也同理。
也就是说stringbuffer类是线程安全的,stringbuilder类是线程不安全的。但是也由于synchronized保留字,这样降低了stringbuffer操作的速度。因此就操作速度而言,stringbuilder>stringbuffer
可以写个简单的小测试例子,生成3个线程对同一个stringbuilder对象进行append操作,线程1执行1000次append("1");线程2执行1000次append("2")线程3执行1000次append("3").....最后得到的stringbuilder对象调用toString()方法,统计里面的1,2,3的个数。理论上应该均为1000个,但由于多线程,而stringbuilder又是线程不安全的,所以结果不是预计的那样,得到的字符串会存在空白符“ ”..这是就是线程不安全造成的结果。。
由stringbuffer和stringbuilder我们很容易想到我们常用的String类,String类有个特点,每次执行String str = "Hello"; str = "World"..实际上每个赋值操作都是新建了一个String 对象,所以可想而知,String类是线程安全的。但是也容易想到,每次赋值都新生成一个对象,这样的速度肯定会大大降低。因此,从速度上来看,StringBuilder>StringBuffer>String
最近在看jdk源码,发现stringbuilder和stringbuffer的方法大多数都类似,且都继承了AbstractStringBuilder类。一时比较混乱,弄不清楚两者区别与联系。于是从网上看了其他人的指导,有自己的理解。
stringbuffer 和stringbuilder都是常用的对字符串操作的类,通过读源码可知,其根本还是对一字符数组进行一系列操作(String类实际上也是如此)。而他们之间的一些区别就是在有些同名的方法如append,方法体都是调用父类AbstractStringBuilder类的append方法,但是在stringbuffer的append方法方法签名有synchronized保留字,意味着每次只有一个线程能进入这个方法执行,因此保证了stringbuffer类的append方法的线程安全性。其他方法也同理。
也就是说stringbuffer类是线程安全的,stringbuilder类是线程不安全的。但是也由于synchronized保留字,这样降低了stringbuffer操作的速度。因此就操作速度而言,stringbuilder>stringbuffer
可以写个简单的小测试例子,生成3个线程对同一个stringbuilder对象进行append操作,线程1执行1000次append("1");线程2执行1000次append("2")线程3执行1000次append("3").....最后得到的stringbuilder对象调用toString()方法,统计里面的1,2,3的个数。理论上应该均为1000个,但由于多线程,而stringbuilder又是线程不安全的,所以结果不是预计的那样,得到的字符串会存在空白符“ ”..这是就是线程不安全造成的结果。。
由stringbuffer和stringbuilder我们很容易想到我们常用的String类,String类有个特点,每次执行String str = "Hello"; str = "World"..实际上每个赋值操作都是新建了一个String 对象,所以可想而知,String类是线程安全的。但是也容易想到,每次赋值都新生成一个对象,这样的速度肯定会大大降低。因此,从速度上来看,StringBuilder>StringBuffer>String
相关文章推荐
- Arduino 2048 小游戏得到 Banzi 大叔的赐福:It's funny!
- Android UI性能优化实战 解决布局复杂导致的程序奔溃
- IOS-UIScrollView滚动图片的简单实现
- CodeSign error: code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.1'
- servlet request获取请求行或者请求体中的paramerter,并解决编码问题
- 使用CAShapeLayer与UIBezierPath画出想要的图形
- iOS开发之使用UIimage+ImageEffects实现图片模糊效果
- 转:UIView之userInteractionEnabled属性介绍
- CSU1661: Query Mutiple
- 转:UIView的sizeToFit与sizeThatFits
- 爬虫实例——主要使用re和requests模块
- 02-线性结构4. Pop Sequence (25)
- In memory with Mr. Vijay Parthasarathy, my respected ex-boss, passed away at Farther's day
- UI系统中的耗时操作处理
- 转:动态计算UITableViewCell高度详解
- 【设计模式】建造者模式(builder模式)
- AutoLayout中使用UIScrollView
- hdu 3530 Subsequence
- 用图片设置javaUI界面
- SUI分页组件和avalon搞定ajax无刷新分页