博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
String、StringBuffer、StringBuilder的区别
阅读量:5897 次
发布时间:2019-06-19

本文共 2082 字,大约阅读时间需要 6 分钟。

String


String不可变,StringBuffer、StringBuilder可变,还有什么区别?String:查源码,类的声明是:public final,清楚的知道,fianl是不可改变的。但是操作字符串的时候,你感觉字符串变长了(改变?)原理是这样的:String name1 = "Luoce";String name2 = name1 + " Jack";字符串变?错!字符串对象的内容是无法更改的!反编译这段程序,运行机制其实是:String s = "Luoce";String s1 = (new StringBuilder().append(s).append(" Jack").toString()); 一旦我们字符串的值改变,内存创建一个新的字符串对象,原来的对象就会变为垃圾被GC回收掉,非常复杂操作来进行的String拼接

StringBuffer、StringBuilder的区别

所以,涉及到字符串操作的,我们一般使用StringBuffer或者StringBuilder,两者有什么区别StringBuffer和StringBuilder都集成了AbstractStringBuilder,而StringBuffer大部分方法都是synchronized,线程安全,但是StringBuilder没有,线程不安全。而且因为线程安全的提升,牺牲的运行速度。因为StringBuffer要维持同步锁,这肯定要消耗部分资源。

总结

运行速度:StringBuilder >  StringBuffer  >  String    Stirng:不可变    StringBuffer线程不安全,StringBuffer线程安全

写个Demo测试速度差异

package demo;/** * String、StringBuffer、StringBuilder速度测试比较 * @author SYFC */public class StringStringBufferStringBuilderTest {
/** * string速度 */ public void stringTest(){ long startTime = System.currentTimeMillis(); String str = null; for (int i = 0; i < 20000; i++) { str = str + i +","; } System.out.println(System.currentTimeMillis()-startTime); } /** * StringBuffer速度 */ public void stringBuffer(){ long startTime = System.currentTimeMillis(); StringBuffer strBuffer = new StringBuffer(); for (int i = 0; i < 20000; i++) { strBuffer.append(i+","); } System.out.println(System.currentTimeMillis() - startTime); } /** * StringBuilder速度 */ public void stringBuilder(){ long startTime = System.currentTimeMillis(); StringBuilder strBuilder = new StringBuilder(); for (int i = 0; i < 20000; i++) { strBuilder.append(i+","); } System.out.println(System.currentTimeMillis()-startTime); } /** * 测试 */ public static void main(String[] args) { StringStringBufferStringBuilderTest test = new StringStringBufferStringBuilderTest(); test.stringTest(); test.stringBuffer(); test.stringBuilder(); }}结果:103353

转载地址:http://ikosx.baihongyu.com/

你可能感兴趣的文章
discuz X3登录流程分析
查看>>
javascript事件响应
查看>>
上传图片预览
查看>>
vim编辑器
查看>>
程序设计的一些原理
查看>>
iTerm的安装以及配置
查看>>
lagp,lacp详解
查看>>
LVS之DR模式原理与实践
查看>>
struts2+extjs
查看>>
Apache2.4.33安装无systemctl/service status/state显示
查看>>
Docker的系统资源限制及验证
查看>>
在大公司呆5年,你就废了
查看>>
mac mamp mysql no start servel
查看>>
Docker简易版:使用更少击键运行Redis,MongoDB
查看>>
laravel框架快速入门(一)
查看>>
swing 鼠标监听addMouseMotionListener
查看>>
js如何实现10秒倒计
查看>>
ubuntu下解决鼠标滚轮不能使用的问题
查看>>
隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结
查看>>
LAV Filters
查看>>