相信大家對(duì)String都非常熟悉,我們也經(jīng)常要用它來(lái)做字符串的連接什么的,例如: String a =b+c file://b,c 都是String 但是在實(shí)際的編譯中卻是這樣: String a=new StringBuffer().append(b).append(c).toString() 顯然,在一個(gè)簡(jiǎn)單的語(yǔ)句中卻意外的多生成了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無(wú)法直接改變其長(zhǎng)度,而必須采用StringBuffer的用法。 我們看這個(gè)例子: 片斷1; printWriter.print(x+y);//x,y為String 片斷2; printWriter.print(x); printWriter.print(y); 你覺(jué)得那個(gè)效率高一些。自己試驗(yàn)一下,想想為什么。
參考:Java Performance and Scalability vol.1. Think in java.
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!