這是壞的嗎?Java字符串連接效率
(想象一下,這是更大的)
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
還是更在一個StringBuilder/StringBuffer的?
這是壞的嗎?Java字符串連接效率
(想象一下,這是更大的)
int count;
//done something to count
String myString = "this " + "is " + "my " + "string" + "and " + this.methodCall() + " answer " + "is : " + count;
還是更在一個StringBuilder/StringBuffer的?
Java編譯器將其轉換成StringBuilder的增加重複字符串連接的性能。 http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#15.18.1.2
當你在一個循環編譯器中連接時,它不能自己替換StringBuilder,那你應該考慮從串聯到StringBuilder。
這將是更可讀如果使用StringBuilder
/StringBuffer
(依據您的應用程序的線程模型)
,如果你寫
String str = "abc";
str+="def";
內部,它會爲同
創建StringBuilder
7: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V
10: aload_1
11: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
14: ldC#6; //String def
16: invokevirtual #5; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: invokevirtual #7; //Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: astore_1
(想象它是bigg ER)...使用「+」操作符
字符串連接創建許多臨時 對象和增加垃圾收集。使用StringBuffer類 更高效。
這裏更多:http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html
StringBuffer strBuf = new StringBuffer();
strBuf.append("this");
strBuf.append("is");
strBuf.append("my");
strBuf.append("string");
strBuf.append("and");
strBuf.append(this.methodCall());
strBuf.append(" answer ");
strBuf.append("is : ");
strBuf.append(count);
是的,但是這種情況只有當你在一個循環concatinating,而不是一次性建立字符串? – 2012-01-04 11:36:11
有什麼區別?如果你做了很多級聯,請使用StringBuffer – JohnJohnGa 2012-01-04 11:36:58
引用[你的源代碼](http://www.ibm.com/developerworks/websphere/library/bestpractices/string_concatenation.html)總是有幫助的。 – 2012-01-04 11:37:40
你應該更喜歡的StringBuilder在字符串連接,因爲你必須被添加到字符串的方法調用和變量。
但是,像「this」和「is」這樣的簡單字符串的數量對性能沒有影響,因爲編譯器會有效地處理它們並創建以字節碼結尾的實際字符串。說了這些,那些提到的Strings在最後的演出上沒有任何開銷。
Relatively new article with graph,顯示與'+'連接的比例非常可怕。正如另一個答案中提到的那樣,StringBuilder可能會更具可讀性。
當我寫這樣的字符串時,我不認爲它對性能有什麼影響 - 編譯器會優化它。
不,沒關係。如果你使用Sun的Java 6編譯器,它實際上會使用StringBuilder。
閱讀本article
Java 5中的StringBuffer的Javadoc狀態。0
由於StringBuilder類支持所有相同的操作,但它的速度更快,因爲它不執行同步,所以通常應優先使用StringBuilder類。
編譯器將字符串文字結合,從而它一樣寫
String myString = "this is my stringand " + this.methodCall() + " answer is : " + count;
這是一樣的
String myString = new StringBuilder().append("this is my stringand ").append(methodCall()).append(" answer is : ").append(count).toString();
,除非你需要我就不會擔心性能消除系統中的垃圾,在這種情況下,您不會在這裏使用字符串。 (它是不太可能的,你需要擔心它)
這篇文章怎麼樣?(http://www.pellegrino.link/2015/08/22/string-concatenation-with-java-8.html)? – gaheinrichs 2016-07-12 21:41:30
「當你在一個循環編譯器中連接時,它不能代替StringBuilder本身,這是你應該考慮從串聯到StringBuilder」 – user765635 2016-07-14 03:03:39
_Its當你連接循環時** **編譯器不能用StringBuilder替代本身。那時你應該考慮**從串聯切換到**使用** StringBuilder_ – Trunk 2017-11-12 00:37:44