Java 8中我们对String是不是不需要用StringBuilder而是直接用+来拼接?如果不是,啥时还需要用?

Java 8中我们对String是不是不需要用StringBuilder而是直接用+来拼接?如果不是,啥时还需要用?

阅读 6.2k
6 个回答
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
    sb.append("index" + i);
}

这种还是需要的。。简单的拼接不需要,因为编译的时候会处理

Java8新增了字符串处理的类 StringJoiner ,新提供一个方法String.join当然实现也是 StringJoiner 看起来视乎有点类似Guava中的字符串处理类,使用StringBuilder或者StringJoiner不要使用 +

在循环中,用+号拼接会生成新的StringBuilder

这样子的,我建议你去看下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出新的对象

这个其实没必要纠结,如果要拼接的字符串很少,比如就两三个子串,直接用+也没啥问题,如果要拼接的子串太多的话,还是建议用StringBuilder

需要看你的应用场景,如果是循环的次数特别多

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

这个时候运行就会很慢,因为它每+一次就会新new一个对象,就会很慢,反正如果用StringBuilder,就会很快。
传送门:http://blog.csdn.net/u0119743...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题