在 J2SE 5.0 後新增的 API,在這之前處理字串是使用 java.lang 中的 String,不過 String 物件是不可修改內容【註一】,因此會造成每修改一下,就有新物件產生,如此在效能上會造成影響,以下是程式碼說明使用 String 和 StringBuilder 上的差異...
public class StringBuilderUsed {
public static void main( String[] args ) {
String text = "" ;
long beginTime = System.currentTimeMillis() ;
for( int i = 0 ; i < 10000 ; ++i )
text = text + i ; // 使用 String 串接
long endTime = System.currentTimeMillis() ;
System.out.println( "執行時間:" + ( endTime - beginTime ) ) ;
StringBuilder builder = new StringBuilder("") ;
beginTime = System.currentTimeMillis() ;
for( int i = 0 ; i < 10000 ; ++i )
builder.append( String.valueOf(i) ) ; // 使用 StringBuilder 串接
endTime = System.currentTimeMillis() ;
System.out.println( "執行時間:" + ( endTime - beginTime ) ) ;
}
}
執行後的結果:
使用 String 的執行時間:6187 ms
使用 StringBuilder 的執行時間:16 ms
public class StringBuilderUsed {
public static void main( String[] args ) {
String text = "" ;
long beginTime = System.currentTimeMillis() ;
for( int i = 0 ; i < 10000 ; ++i )
text = text + i ; // 使用 String 串接
long endTime = System.currentTimeMillis() ;
System.out.println( "執行時間:" + ( endTime - beginTime ) ) ;
StringBuilder builder = new StringBuilder("") ;
beginTime = System.currentTimeMillis() ;
for( int i = 0 ; i < 10000 ; ++i )
builder.append( String.valueOf(i) ) ; // 使用 StringBuilder 串接
endTime = System.currentTimeMillis() ;
System.out.println( "執行時間:" + ( endTime - beginTime ) ) ;
}
}
執行後的結果:
使用 String 的執行時間:6187 ms
使用 StringBuilder 的執行時間:16 ms
【註一】乍看之下我們可以任意讀寫 String 物件中的內容,事實上,當你修改裡頭的內容,系統會新增一個 String 物件來擺放你修改後的值,而原先的 String
物件則會放置到 string pool,詳細參考 Java SE 6 技術手冊。
沒有留言:
張貼留言