曹耘豪的博客

Java的String的加法,

  1. StringBuilder
  2. StringBuffer
  3. StringBuilder 和 StringBuffer 比较
  4. 可以直接使用"+"吗?

在我们编写Java代码过程中,经常有拼接字符串的需求,通常有三种方法:

首先介绍一下StringBuilder

StringBuilder

先看一下如何使用StringBuilder

1
2
3
4
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
sb.toString(); // "ab"

通过append操作拼接字符串,最后通过toString方法得到最终的字符串。

StringBuffer

StringBufferStringBuilder的使用方法差不多。

1
2
3
4
StringBuffer sb = new StringBuffer();
sb.append("a");
sb.append("b");
sb.toString(); // "ab"

既然差不多,为什么还要另搞一个StringBuffer呢?查看源码可以看到,StringBuffer的操作都是有synchronized关键字的,也就是说是线程安全的。

StringBuilder 和 StringBuffer 比较

所以我们可以总结,

可以直接使用"+"吗?

当然可以,不然发明它干吗~~

假如,我们编写以下程序,直接相加2个字符串

1
String ret = str1 + str2;

build后查看class文件,发现是这样的:

1
String ret = (new StringBuilder()).append(str1).append(str2).toString())

也就是说,如果直接采用+进行字符串的合并,编译器会将其转为StringBuilder,所以放心使用String的加法吧~

只是

如果你要写下面的代码

1
2
3
4
String ret = "";
for (String str: strs) {
ret += str;
}

看看build后的结果

1
2
3
4
String ret = "";
for (String str: strs) {
ret = (new StringBuilder()).append(ret).append(str).toString();
}

显然,这将会产生n多个StringBuilder,大大增加了gc开销,这个时候,StringBuilderStringBuffer便派上用场了,所以,知道该怎么做了吗。

   /