String,StringBuffer,StringBuffer对象在复杂字符串拼接中的效率测试
在java应用程序中经常需要用到字符串拼接,在考量字符串拼接运算是经常考虑到效率问题,下面就比较一下String,StringBuffer,StringBuffer对象在字符串拼接中的运行效率问题。在简单字符串拼接中几乎分辨不出来他们之间的速度区别,有人还做了篇文章,对于简单的字符串运算,String的效率甚至比StringBuffer还高。但复杂运算中呢?经过测试验证了效率StringBuffer>StringBuffer>String.
?
由于String是个final对象,他的值如果改变就生成了新的String对象,所以如果复杂拼接会造成String对象泛滥,占用内存,影响效率,一般来讲web服务应用内存比较大,影响较小,但手机应用其效率影响比较明显。
?
StringBuffer是个可变长度的字符操作对象,可保证线程安全,拼接中效率要比String高些;
?
为了提高效率后来又推出了线程非安全的StringBuffer对象,拼接中效率要比StringBuffer高些。
?
对于复杂字符串运算,我做了个测试,写了三个方法,分别用String,StringBuffer,StringBuilder进行拼接,代码如下:
?
复杂拼接函数代码
?
?测试代码:
?
?
long l0=System.currentTimeMillis();for(int i=0;i<100000;i++){getTitle1(15,"docview.jsp","赛灵通项目(Xerllent Projects)是一项基于j2ee技术的企业信息化系统研发计划,这项计划的目的是让更多企业享受简洁易用、安全可靠、功能强大的信息化软件平台。"+i,"李作者","232"+i,f,Timestamp.valueOf("2007-08-01 24:23:12"),20,"PTAV","<img src=\"image01.gif\">",true,"red","bold",3,"_blank");}out.println("String cost milli seconds:"+(System.currentTimeMillis()-l0));out.print("<br>");l0=System.currentTimeMillis();for(int i=0;i<100000;i++){getTitle2(15,"docview.jsp","赛灵通项目(Xerllent Projects)是一项基于j2ee技术的企业信息化系统研发计划,这项计划的目的是让更多企业享受简洁易用、安全可靠、功能强大的信息化软件平台。"+i,"李作者","232"+i,f,Timestamp.valueOf("2007-08-01 24:23:12"),20,"PTAV","<img src=\"image01.gif\">",true,"red","bold",3,"_blank");}out.println("BufferString cost milli seconds:"+(System.currentTimeMillis()-l0));out.print("<br>");l0=System.currentTimeMillis();for(int i=0;i<100000;i++){getTitle3(15,"docview.jsp","赛灵通项目(Xerllent Projects)是一项基于j2ee技术的企业信息化系统研发计划,这项计划的目的是让更多企业享受简洁易用、安全可靠、功能强大的信息化软件平台。"+i,"李作者","232"+i,f,Timestamp.valueOf("2007-08-01 24:23:12"),20,"PTAV","<img src=\"image01.gif\">",true,"red","bold",3,"_blank");}out.println("StringBuilder cost milli seconds:"+(System.currentTimeMillis()-l0));out.print("<br>");?
?每个方法分别运行10万次,经过多次的、调整顺序的测试,结果基本如下:
--------------------------------------------
?
[顶顶顶顶顶]赛灵通项目(Xerllent Pro... [李作者] (232)
[顶顶顶顶顶]赛灵通项目(Xerllent Pro... [李作者] (232)
[顶顶顶顶顶]赛灵通项目(Xerllent Pro... [李作者] (232)
String cost milli seconds:1203
StringBuffer cost milli seconds:781
StringBuilder cost milli seconds:750----------------------------------------------
?
结论:在复杂字符串拼接运算中,采用StriingBuilder将会提高性能速度,尤其是在new StriingBuilder(capacity)初始化是,填写合适的capacity值会获得更好的效果;StriingBuilder运算效率比String至少提高%30,甚至提高近50%。
?
文章链接1:一篇外国佬对运行效率的测试结果 http://kaioa.com/node/59
文章链接2: 如何让你的程序运行的更快(1)---StringVSStringBuffer http://www.blogjava.net/majianan/archive/2006/09/14/69706.html