標籤:
一、概述
字串的處理在java中我們經常要用到java提供了三個類來提供對字串的操作,String,StringBuffer,StringBuilder
String:固定長
StringBuffer:不固定長安全執行緒
Stringbuilder:不固定長線程不安全
二、效能PK
1.建立超大字串。
代碼:
public class StringOne {public static void main(String[] args) {String str="";StringBuffer strb=new StringBuffer();StringBuilder strbd=new StringBuilder();long startString=System.currentTimeMillis();for (int i = 0; i < 100000; i++) {str=str+i;}System.out.println("String add Time:"+(System.currentTimeMillis()-startString));long startStringBuffer=System.currentTimeMillis();for (int i = 0; i < 100000; i++) {strb.append(i);}System.out.println("StringBuffer add Time:"+(System.currentTimeMillis()-startStringBuffer));long startStringBuilder=System.currentTimeMillis();for (int i = 0; i < 100000; i++) {strbd.append(i);}System.out.println("StringBuilder add Time:"+(System.currentTimeMillis()-startStringBuilder));}}
:
2.字串常量的添加操作
代碼:
public class StringTwo {public static void main(String[] args) {long startString=System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {String str="String"+"and"+"String"+"append";}System.out.println("String Time:"+(System.currentTimeMillis()-startString));long startStringBuffer=System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {StringBuffer strb=new StringBuffer();strb.append("String");strb.append("and");strb.append("String");strb.append("append");}System.out.println("StringBuffer Time:"+(System.currentTimeMillis()-startStringBuffer));long startStringBuilder=System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {StringBuilder strbdr=new StringBuilder();strbdr.append("String");strbdr.append("and");strbdr.append("String");strbdr.append("append");}System.out.println("StringBuilder Time:"+(System.currentTimeMillis()-startStringBuilder));}}
:
三、總結
通過上述的效能對比得出結論在我們構建超大字串的時候StringBuffer和StringBulder的表現比String的表現要好的很多不是一個數量級的而在字串常量的添加操作中String的表現比StringBuffer和StringBuilder的表現好,原因就在於在建立String類的比建立StringBuffer和StringBuilder使用的開銷小時間短,所以這三個類的用法各有千秋根據我們具體的業務去選擇用哪一個類。
Java入門到精通——基礎篇String StringBuffer StringBuilder效能PK