關於String,StringBuffer,StringBuilder的區別

實際開發過程當中,一直使用String,對於StringBuffer,StringBuilder瞭解甚少,偶爾遇到這個問題,上網找了找,這裏作下記錄。java

String是final類型,不能被繼承,一旦建立了,就不能被修改,而咱們使用的時候,好比String a = 'abc'; a='efg';實際上又建立了一個對象,這個對象的值爲'efg',而後將這個值保存到以前a的對象中,正式由於多了這個步驟,在進行頻繁賦值操做的時候才致使相對於StringBuffer效率更低。小程序

StringBuffer不是final類型的,因此是可變對象,它的創建是經過new StringBuffer(),對象創建以後,就會在內存中申請一塊空間,初始值爲null,賦值方式是經過.append("xxx")來實現。安全

StringBuilder跟StringBuffer的方法和操做基本上相同,惟一不一樣的是StringBuffer是線程安全的,而StringBuilder是不安全的。app

摘選了網上的一段小程序:測試

public class Test {
public static void main(String args[]) {
String str = "abc";
StringBuffer sb = new StringBuffer("abc");
Runtime runtime = Runtime.getRuntime();
long start = System.currentTimeMillis();
long startFreememory = runtime.freeMemory();
for (int i = 0; i < 10000; i++) {
str += i;
//測試StringBuffer時候把註釋打開
//sb.append(i);
}
long endFreememory = runtime.freeMemory();
long end = System.currentTimeMillis();
System.out.println("操做耗時:" + (end - start) + "ms," + "內存消耗:"
+ (startFreememory - endFreememory)/1024 + "KB");
}
}

測試結果:ui

使用String作10000次向一字符串後添加字符串spa

操做耗時:1666ms,內存消耗:1256KB.net


使用StringBuffer作10000次向一字符串後添加字符串線程

操做耗時:13ms,內存消耗:131KBcode

這個差異還真是挺大的。

關於這塊內容,推薦下面的文章,講的更爲貼切

http://blog.csdn.net/rmn190/article/details/1492013

相關文章
相關標籤/搜索