欢迎来到天天文库
浏览记录
ID:34708007
大小:54.61 KB
页数:9页
时间:2019-03-09
《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可以看到执行的时间差距很大,这说
此文档下载收益归作者所有