为什么在Java中使用StringBuffer而不是String串联操作符

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

有人告诉我,使用StringBufferJava连接字符串比使用s +运算符效率更高String。当你这样做的时候会发生什么?StringBuffer有什么不同?

提问于
用户回答回答于

对于简单的连接如:

String s = "a" + "b" + "c";

这是相当无意义的使用StringBuffer- 正如jodonnell指出,它将被巧妙地翻译成:

String s = new StringBuffer().append("a").append("b").append("c").toString();

但是在循环中连接字符串是非常不方便的,例如:

String s = "";
for (int i = 0; i < 10; i++) {
    s = s + Integer.toString(i);
}

在此循环中使用字符串将在内存中生成10个中间字符串对象:“0”,“01”,“012”等。使用StringBuffer你写的一样,只需更新一些内部缓冲区,StringBuffer而不要创建你不需要的那些中间字符串对象:

StringBuffer sb = new StringBuffer();
for (int i = 0; i < 10; i++) {
    sb.append(i);
}

实际上,对于上面的示例,你应该使用StringBuilder(在Java 1.5中引入)而不是StringBuffer- StringBuffer稍微重一点,因为它的所有方法都是同步的。

用户回答回答于

最好使用StringBuilder

当你对两个字符串使用+时,它会像这样编译代码:

String third = first + second;

像这样的东西:

StringBuilder builder = new StringBuilder( first );
builder.append( second );
third = builder.toString();

因此,只是一些小例子,它通常不会有所作为。但是当你构建一个复杂的字符串时,你经常需要处理更多的事情,例如,你可能会使用许多不同的附加语句,或者像这样的循环:

for( String str : strings ) {
  out += str;
}

扫码关注云+社区