java中 String.format與StringBuilder、String+的比較
阿新 • • 發佈:2018-11-11
效率比較程式碼如下:
int [] testNums =new int[]{10,10000,100000,1000000,10000000}; for(int item:testNums){ System.out.println("testnums:"+item); long time1 = System.currentTimeMillis(); for(int i=0;i<item;i++){ String s=String.format("%s %s %s", "aa","bb","cc"); } long time2 =System.currentTimeMillis(); System.out.println("String.format waste time:"+(time2-time1)+"ms"); long time3=System.currentTimeMillis(); //StringBuilder ss=new StringBuilder(); for(int i=0;i<item;i++){ String ssa=new StringBuilder().append("aa").append("cc").append("dd").toString(); } long time4 =System.currentTimeMillis(); System.out.println("StringBulder waste time:"+(time4-time3)+"ms"); System.out.println();
從實驗結果來看,StringBuilder的執行效率高。
String + 的方式,編譯器會將其優化成 StringBuilder形式操作;但是不建議直接對字串進行“+”操作,因為容易出現多次建立物件。比如:
String s=""
for(int i=0;i<100;i++){
s=s+"aa";
}
s+"aa"編譯器會將其優化成 new StringBuilder().append(s).append("aa").toString()
每迴圈一次,就會新例項化一個StringBuilder物件。
StringBuilder 會建立一個StringBuilder物件,容易多次重新分配緩衝;
String.Format 會建立一個 Formatter物件。