Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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

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 stringbuffer/stringbuilder如何在内存中工作?stringbuilder.delete函数是如何工作的?_Java_String_Stringbuilder_Stringbuffer - Fatal编程技术网

Java stringbuffer/stringbuilder如何在内存中工作?stringbuilder.delete函数是如何工作的?

Java stringbuffer/stringbuilder如何在内存中工作?stringbuilder.delete函数是如何工作的?,java,string,stringbuilder,stringbuffer,Java,String,Stringbuilder,Stringbuffer,我已经用一些字符附加了一些strBuild,并将该strBuild放入stringBuildArr中。然后在strBuild上调用java.lang.StringBuilder.delete(int start,int end)函数 问题在于,这不仅会从strBuild中删除数据,还会从stringBuildArr中删除数据 StringBuilder strBuild = new StringBuilder(); StringBuilder stringBuildArr[] =

我已经用一些字符附加了一些strBuild,并将该strBuild放入stringBuildArr中。然后在strBuild上调用java.lang.StringBuilder.delete(int start,int end)函数

问题在于,这不仅会从strBuild中删除数据,还会从stringBuildArr中删除数据

    StringBuilder strBuild = new StringBuilder();
    StringBuilder stringBuildArr[] = new StringBuilder[10];
    strBuild.append("hgfd");
    stringBuildArr[0] = strBuild;
    System.out.println("Output1: "+stringBuildArr[0]);
    strBuild.delete(0, strBuild.length());
    System.out.println("Output2: "+stringBuildArr[0]);
结果

输出1:hgfd

输出2:

那么,这些stringbuilder和stringbuffer类的存储是如何工作的呢?

这里没有“问题”,数组存储对同一
strBuild
实例的引用;没有
stringBuildArr[0]=strBuild的副本StringBuilder
不是免费的。但是如果你想要一份足够简单的拷贝,就把它改成

stringBuildArr[0] = new StringBuilder(strBuild);
这里没有“问题”,数组存储对同一
strBuild
实例的引用;没有
stringBuildArr[0]=strBuild的副本StringBuilder
不是免费的。但是如果你想要一份足够简单的拷贝,就把它改成

stringBuildArr[0] = new StringBuilder(strBuild);

Java
StringBuilder
是大多数Java程序员都熟悉的一个类。字符串是不可变的,因此字符串中的每一个更改都会导致创建一个新对象,但是在
StringBuilder
buffer
中,它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为


有关更多信息,请查看官方文档:

Java
StringBuilder
是大多数Java程序员都熟悉的类。字符串是不可变的,因此字符串中的每一个更改都会导致创建一个新对象,但是在
StringBuilder
buffer
中,它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为


有关更多信息,请查看官方文档:

so,当我将其称为'stringBuildArr[0]=strBuild;`只有引用是共享的,而不是它的内容?@vaibhavcool20,是的,逻辑上你可以这么说。最好通过我分享的官方链接,它会消除你所有的疑虑。字符串的概念非常广泛,在Java世界中,人们应该非常清楚这一点。愉快的编码,如果你清楚的话,接受这个答案,它将帮助其他人,当我称之为'stringBuildArr[0]=strBuild;`只有引用是共享的,而不是它的内容?@vaibhavcool20,是的,逻辑上你可以这么说。最好通过我分享的官方链接,它会消除你所有的疑虑。字符串的概念非常广泛,在Java世界中,人们应该非常清楚这一点。快乐的编码,如果你清楚的话,接受答案,这将有助于其他人我把它命名为一个问题,因为没有更好的词。“因为复制StringBuilder不是免费的”这是什么意思?@elliot,似乎他不确定如何询问或如何提及,他是新的。@vaibhavcool20这意味着创建
StringBuilder
实例的唯一引用副本需要一个复制操作,而这在所有情况下都不是必需的。简而言之,我把它命名为一个问题,因为没有更好的词。“因为复制StringBuilder不是免费的”这是什么意思?@elliot,似乎他不确定如何询问或如何提及,他是新的。@vaibhavcool20这意味着创建
StringBuilder
实例的唯一引用副本需要一个复制操作,而这在所有情况下都不是必需的。简言之