2011-08-24 53 views
-4

可能重複:
String, StringBuffer, and StringBuilder常用的方法緩衝

什麼是字符串和StringBuffer之間常用的方法?字符串和字符串緩衝區有什麼區別?

+6

嗯,這裏有很多資源,它描述了它們之間的差異,你可以很容易地看到常見的方法。那麼,你爲什麼在這裏問這個問題? –

+4

爲什麼不在[API](http://download.oracle.com/javase/6/docs/api/)中自己查看? – adarshr

+0

並快速回答你的問題:字符串是不可變的,而StringBuffer是可變的。當你有複雜的字符串,你不能單步構建,你使用轉換爲字符串的StringBuffer。當使用'+'連接字符串時,Java編譯器會將其轉換爲引擎下的StringBuffer調用。 –

回答

0

當您需要連接多個字符串文字一起,那麼它可能會更好,爲您使用StringBuffer對象,當你與拼接完成,使用toString()方法把它變成一個String對象。

編輯:請忽略下面

的線路中的字符串池中的下面實例6個字符串對象理論上。

String a = "A" + "B" + "C" + "D" + "E"; 
+2

*幾乎所有的情況下[[StringBuilder]](http://download.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html)應該通過'StringBuffer'使用:它提供了完全相同的API,並且僅缺少同步(無論如何,這在'StringBuffer'上幾乎不會有用)。 –

+0

注意謝謝! –

+0

我拒絕了StringBuilder應該被使用的想法*除了*在大型模板處理等特殊情況下。如果您的代碼中包含「+」,請使用最清楚的內容。 Java編譯器實際上可能會爲您使用StringBuilder! – 2011-08-24 09:04:07

2

最大的區別是,String是不可改變的,StringBuffer是可變的。

1

StringBuffer可讓您更快地加入字符串。例如,下列代碼:

String s = "Initial string "; 
for (int i = 0; i < 100; i++) { 
    s = s + i; 
} 

在每個迭代上創建表示整數i串和比還創建的si連接在一起的新字符串並移動s參照該新對象。它不會通過擴展其內容來重複使用相同的s對象。

StringBuffer可讓您更有效地追加字符串。還有一個叫做StringBuilder的新版本,它基本上是StringBuffer,沒有同步。

1

StringBuffer JavaDoc前幾行給出一個不錯的答案:

一個線程安全的,字符的可變序列。字符串緩衝區就像String,但可以修改。