Java 8中我们对String是不是不需要用StringBuilder而是直接用+来拼接?如果不是,啥时还需要用?
Java 8中我们对String是不是不需要用StringBuilder而是直接用+来拼接?如果不是,啥时还需要用?
Java8新增了字符串处理的类 StringJoiner
,新提供一个方法String.join
当然实现也是 StringJoiner
看起来视乎有点类似Guava中的字符串处理类,使用StringBuilder或者StringJoiner不要使用 +
这样子的,我建议你去看下String的源码,String是final类型,也就是不可继承的,用String我们都会用StringBuffer或者StringBuilder,一般我们选择StringBuilder,但对应不同的场景和优化我们选择不同的。StringBuilder是非线程安全的,但是高效快,另一种则反之。字符串拼接我是不大建议的,至于为什么不建议是因为性能内存的原因。代码洁癖可以忽略。我们可以看下这段代码
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //没猜错就是true
因为java在new 出str1的时候会把str1放在常量池里,而java在每new一个新常量时都会去常量池查查是否存在这个值直接引用。从而节省内存开销。
但是如果你接着这样
str1 = str1+"1";
str2 = str2+"1";
System.out.println(str1==str2);
这也就是String为啥是final,他会new出新的对象
需要看你的应用场景,如果是循环的次数特别多
s = "";
for(int i=0; i<1000000; i++){
s = s + "1"
}
这个时候运行就会很慢,因为它每+一次就会新new一个对象,就会很慢,反正如果用StringBuilder,就会很快。
传送门:http://blog.csdn.net/u0119743...
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
这种还是需要的。。简单的拼接不需要,因为编译的时候会处理