在StringBuffer中等价于+

时间:2011-09-12 15:03:32

标签: java string

我一直在使用String来执行以下操作。

String x = "a";
String y = "b";
String z = y+""+x;
x = y;
y = z;

因此x和y的最终值是b和ba。我试着使用StringBuffer。

StringBuffer x = new StringBuffer("a");
StringBuffer y = new StringBuffer("b");
StringBuffer z = new StringBuffer();
z = y+""+x;   //??? 

API提供追加功能,但它不执行串联操作。在StringBuffer类中是否存在连接的等价物?

8 个答案:

答案 0 :(得分:6)

除非必须,否则不要使用StringBuffer。 Java 5.0及更高版本默认使用StringBuilder

  

从JDK 5发布版开始,这个类已经补充了一个设计用于单个线程StringBuilder的等效类。 StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

StringBuilder x = new StringBuilder("a");
StringBuilder y = new StringBuilder("b");
StringBuilder z = new StringBuilder().append(x).append(y);

答案 1 :(得分:4)

您想要的方法是追加:z = x.append(" ").append(y);

正如您所看到的,附加内容可以级联以获得良好的代码流。

但如果您使用的是Java 1.5或更高版本,最好还是使用StringBuilderStringBuffer是一个同步类,在需要线程安全代码时很好。当您的变量不需要线程安全时,请使用StringBuilder来获得更好的性能。

答案 2 :(得分:2)

您可以使用StringBuffer.append(StringBuffer)

z.append(y).append(x);

答案 3 :(得分:1)

String z = y.toString() + x.toString();

StringBuilder z = new StringBuilder();
z.append(y).append(x);

注意:

  1. + "" +是多余的,所以我已将其删除。
  2. 除非您打算跨线程共享字符串缓冲区,否则您应该使用StringBuilder而不是StringBuffer

答案 4 :(得分:1)

StringBuffer本身不像String那样支持+。您必须使用append方法。

答案 5 :(得分:1)

不,没有; String上使用的+运算符是Java中对象的特例。只有String才能使用它。要在StringBuffer进行连接,它更加迂回。您必须使用append()(或上帝禁止,将其转换为String,使用+,然后将结果转换回StringBuffer)。

使用StringBuffer,您可以追加另一个StringBuffer。即:

 stringBuffer1.append(stringBuffer2)

答案 6 :(得分:0)

AHHH

字符串是不可变的,因此每次执行z + x时,实际上都是实例化一个包含前两个连接的全新对象。

StringBuffers是可变的,这意味着可以在不创建新实例的情况下更改它们。这允许创建一个字符串缓冲区,并根据需要附加其他字符串值。

StringBuffer a = new StringBuffer("a");
a.append("b").append("c");
a.append("d");

在调用a.toString()时会产生“abcd”。

答案 7 :(得分:0)

假设你想要:

  • x的值为“a”
  • y的值为“b”
  • z的值为“ab”

然后,不,StringBuffer / Builder不会这样做。