明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

有關(guān)String的性能問題 0.2版

[摘要]相信大家對(duì)String都非常熟悉,我們也經(jīng)常要用它來做字符串的連接什么的,例如:String a =b+c file://b,c 都是String 但是在實(shí)際的編譯中卻是這樣: String a=n...
相信大家對(duì)String都非常熟悉,我們也經(jīng)常要用它來做字符串的連接什么的,例如:
String a =b+c file://b,c 都是String
但是在實(shí)際的編譯中卻是這樣:
String a=new StringBuffer().append(b).append(c).toString() 顯然,在一個(gè)簡單的語句中卻意外的多生成了2個(gè)對(duì)象:
.StringBuffer()
.toString返回的一個(gè)String
我們比較一下這兩段程序的性能:
程序片斷一:
StringBuffer s=new StringBuffer();
long start = System.currentTimeMillis();
for (int i=0;i<10000;i++){
s1+="a";
}
long stop = System.currentTimeMillis();
System.out.println(stop-start);
程序片斷二:
StringBuffer s=new StringBuffer();
long start=System.currentTimeMillis();
for (int i=0;i<10000;i++){
s.append("a");
}
long stop=System.currentTimeMillis();
System.out.println(stop-start);
比較一下結(jié)果,差距很明顯。
至于為什么String的連接這么做,因?yàn)镾tring無法直接改變其長度,而必須采用StringBuffer的用法。
 我們看這個(gè)例子:
片斷1;
printWriter.print(x+y);//x,y為String
片斷2;
printWriter.print(x);
printWriter.print(y);
你覺得那個(gè)效率高一些。自己試驗(yàn)一下,想想為什么。

參考:Java Performance and Scalability vol.1.
Think in java.