Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相当于+;在字符串缓冲区中_Java_String - Fatal编程技术网

Java 相当于+;在字符串缓冲区中

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来执行以下操作

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);