在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ Java 8中我們對String是不是不需要用StringBuilder而是直接

Java 8中我們對String是不是不需要用StringBuilder而是直接用+來拼接?如果不是,啥時還需要用?

Java 8中我們對String是不是不需要用StringBuilder而是直接用+來拼接?如果不是,啥時還需要用?

回答
編輯回答
替身

Java8新增了字符串處理的類 StringJoiner ,新提供一個方法String.join當(dāng)然實現(xiàn)也是 StringJoiner 看起來視乎有點類似Guava中的字符串處理類,使用StringBuilder或者StringJoiner不要使用 +

2017年1月22日 11:25
編輯回答
失心人

在循環(huán)中,用+號拼接會生成新的StringBuilder

2017年8月30日 14:43
編輯回答
葬愛

這個其實沒必要糾結(jié),如果要拼接的字符串很少,比如就兩三個子串,直接用+也沒啥問題,如果要拼接的子串太多的話,還是建議用StringBuilder。

2017年5月23日 18:15
編輯回答
任她鬧

這樣子的,我建議你去看下String的源碼,String是final類型,也就是不可繼承的,用String我們都會用StringBuffer或者StringBuilder,一般我們選擇StringBuilder,但對應(yīng)不同的場景和優(yōu)化我們選擇不同的。StringBuilder是非線程安全的,但是高效快,另一種則反之。字符串拼接我是不大建議的,至于為什么不建議是因為性能內(nèi)存的原因。代碼潔癖可以忽略。我們可以看下這段代碼

String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2);   //沒猜錯就是true

因為java在new 出str1的時候會把str1放在常量池里,而java在每new一個新常量時都會去常量池查查是否存在這個值直接引用。從而節(jié)省內(nèi)存開銷。
但是如果你接著這樣

str1 = str1+"1";
str2 = str2+"1";
System.out.println(str1==str2);  

這也就是String為啥是final,他會new出新的對象

2017年7月19日 04:33
編輯回答
老梗

需要看你的應(yīng)用場景,如果是循環(huán)的次數(shù)特別多

s = "";
for(int i=0; i<1000000; i++){
    s = s + "1"
}

這個時候運行就會很慢,因為它每+一次就會新new一個對象,就會很慢,反正如果用StringBuilder,就會很快。
傳送門:http://blog.csdn.net/u0119743...

2017年1月24日 11:11
編輯回答
久舊酒
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
    sb.append("index" + i);
}

這種還是需要的。。簡單的拼接不需要,因為編譯的時候會處理

2018年6月29日 15:38