Java 相当于+;在字符串缓冲区中
我一直在使用String来执行以下操作Java 相当于+;在字符串缓冲区中,java,string,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;
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提供了append函数,但它不做连接所做的事情。StringBuffer类中是否有用于连接的等价物 您可以使用:
啊
字符串是不可变的,因此每次执行z+x操作时,实际上是在实例化一个包含前两个字符串串联的全新对象
StringBuffers是可变的,这意味着可以在不创建新实例的情况下更改它们。这允许创建一个stringbuffer,并根据需要附加额外的字符串值
StringBuffer a = new StringBuffer("a");
a.append("b").append("c");
a.append("d");
调用.toString()时将导致“abcd”
String z = y.toString() + x.toString();
或
注:
+“”+
是多余的,因此我已将其删除StringBuilder
而不是StringBuffer
StringBuffer不像String那样本机支持
+
。您必须使用append
方法。没有;String
上使用的+运算符是Java中对象的特例。只有String
可以使用它。要在StringBuffer
中进行连接,它更为迂回。您必须使用append()
(或者上帝禁止,将它们转换为String
,使用+,然后将结果转换回StringBuffer
)
使用StringBuffer
,您可以附加另一个StringBuffer
。即:
stringBuffer1.append(stringBuffer2)
除非必须,否则不要使用StringBuffer。Java 5.0及更高版本默认使用StringBuilder 从JDK5发行版开始,这个类已经得到了一个等效类的补充,该类是为单线程StringBuilder设计的。通常应优先使用StringBuilder类,因为它支持所有相同的操作,但速度更快,因为它不执行同步
您想要的方法是append:
z=x.append(“”).append(y)代码>
正如您所看到的,可以级联这些附件以获得一个良好的代码流
但如果您使用的是Java 1.5或更高版本,则最好使用StringBuilder
StringBuffer
是一个同步类,在需要线程安全代码时非常有用。当您的变量不需要线程安全性时,请使用StringBuilder
,以获得更好的性能。假设您需要:
- x的值为“a”
- y的值为“b”
- z的值为“ab”
那么,不,StringBuffer/Builder不会这样做。追加方法有什么问题?只需链附加:newstringbuffer(“a”).append(“”)。append(“b”)代码>z=y.append(x);你应该做你想做的!为什么b和a之间的字符串是空的?“API提供了append函数,但它不做连接所做的事情。”你是什么意思?StringBuffer#append()
非常类似于字符串连接。如果使用append方法只需一个就可以完成所有这些,为什么还要创建这么多StringBuffer或stringbuilder对象呢?Aix是对的,除非您被迫使用旧版本的Java(5之前版本)。StringBuilder不进行同步,因此速度更快!为什么要实例化额外的字符串?y、 追加(x).toString()@埃迪:谁说你被允许修改y
?简称:StringBuilder z=新的StringBuilder(x)。追加(y)代码>缩短它有点棘手,在您知道它之前,您可以编写z=“ab”
;)但是在那之后,x
和z
指向同一个实例,x
的原始内容就丢失了。没错。创建一个新的实例是很容易的。是的,这就是我想要实现的。
StringBuilder z = new StringBuilder();
z.append(y).append(x);
stringBuffer1.append(stringBuffer2)
StringBuilder x = new StringBuilder("a");
StringBuilder y = new StringBuilder("b");
StringBuilder z = new StringBuilder().append(x).append(y);