stringstringbufferstringbuilder三者之间的区别

stringstringbufferstringbuilder三者之间的区别

ID:34708007

大小:54.61 KB

页数:9页

时间:2019-03-09

stringstringbufferstringbuilder三者之间的区别_第1页
stringstringbufferstringbuilder三者之间的区别_第2页
stringstringbufferstringbuilder三者之间的区别_第3页
stringstringbufferstringbuilder三者之间的区别_第4页
stringstringbufferstringbuilder三者之间的区别_第5页
资源描述:

《stringstringbufferstringbuilder三者之间的区别》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.String类是不可变类,任何对String的改变都会引发新的String对象的生成;而StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象.当改变字符串内容时,采用StringBuffer能获得更好的性能。既然是为了获得更好的性能,那么采用StringBuffer能够获得最好的性能吗?答案是NO!为什么?如果你读过《ThinkinJava》,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在。对,就是支持线程同步保证线程安全而导致性能下降的问题。HashTable

2、是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也在于此,新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer2.StringBuffer和StringBuilder的区别?StringBuffer是线程安全的StringBuilder不保证

3、线程安全(在1.5中引入的),一般情况下比StringBuffer快。你的java正常运行是什么意思?你在ie中安装了jdk吧?【weiqiyiji】:就是我说我把环境变量classpath删除,然后把path里的Java部分的内容去掉后,写的Java程序一样通过编译,一样可以运行。这跟IE有什么关系?我的浏览器也不是ie【gongyali2005】:线程安全否?【bao110908】:不会吧,你是使用手工进行编译的?不说其他的,把path中关于Java的都去掉,javac就没有办法用了!【phoenixsbk】:一样可以用的【qq7338367】

4、:一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。如果程序对这种附加字符串的需求很频繁,并不建议使用+来进行字符串的串联。在面向对象程序设计中,最好是能重复运用已生成的对象,对象的生成需要内存空间与时间,不断地产生String实例是一个没有效率的行为。J2SE5.0提供java.lang.StringBuilder类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可

5、容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder会让程序的效率大大提高。通过下面的简单测试程序就可以知道效能差距有多大。ü范例6.5  AppendStringTest.java                                                       publicclassAppendStringTest{    publicstaticvoidmain(String[]args){        Stringtext=""

6、;        longbeginTime=System.currentTimeMillis();        for(inti=0;i<10000;i++)            text=text+i;        longendTime=System.currentTimeMillis();        System.out.println("执行时间:"+(endTime-beginTime));        StringBuilderbuilder=newStringBuilder("");        beginTime=S

7、ystem.currentTimeMillis();        for(inti=0;i<10000;i++)            builder.append(String.valueOf(i));        endTime=System.currentTimeMillis();        System.out.println("执行时间:"+(endTime-beginTime));    }}在范例6.5中首先使用+来串联字符串,使用System.currentTimeMillis()取得for循环执行前、后的系统时间,这样就可

8、以得知for循环执行了多久。以下是我的计算机上的测试数据:执行时间:4641执行时间:16可以看到执行的时间差距很大,这说

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。