早先用Java的時候,知道有個類叫StringBuffer,用來拼接較長的字符串。轉(zhuǎn)到C#之后,也有一個似類功能的類叫作StringBuilder,簡寫都是sb,非常好記。
再后來轉(zhuǎn)移回Java的時候,發(fā)現(xiàn)Java也有了StringBuilder,于是就好奇了一下為什么在StringBuffer之后又推出了StringBuilder。
原來Java的StringBuilder(和C#一樣)是非線程安全的,而早先的StringBuffer具有一定的線程安全屬性。當然,推出StringBuilder,主要也是因為它沒有必要在多線程的情況下使用。
常見的StringBuilder(或者StringBuffer)的用例是:
1
2
3
4
5
6
7
|
public String toString() { return new StringBuilder() .append( "Name: " + name) .append( "Foo: " + foo) .append( "Bar: " + bar) .toString(); } |
在這種情況下,StringBuilder都不是一個類成員,它只是一個局部變量,根本談不上多線程的問題。
于是,StringBuilder的引入帶來了非常大的性能提升,而且一點安全問題也沒有……