Java stringbuffer/stringbuilder如何在内存中工作?stringbuilder.delete函数是如何工作的?
我已经用一些字符附加了一些strBuild,并将该strBuild放入stringBuildArr中。然后在strBuild上调用java.lang.StringBuilder.delete(int start,int end)函数 问题在于,这不仅会从strBuild中删除数据,还会从stringBuildArr中删除数据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[] =
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);
JavaStringBuilder
是大多数Java程序员都熟悉的一个类。字符串是不可变的,因此字符串中的每一个更改都会导致创建一个新对象,但是在StringBuilder
或buffer
中,它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为
有关更多信息,请查看官方文档:JavaStringBuilder
是大多数Java程序员都熟悉的类。字符串是不可变的,因此字符串中的每一个更改都会导致创建一个新对象,但是在StringBuilder
或buffer
中,它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为
有关更多信息,请查看官方文档:so,当我将其称为'stringBuildArr[0]=strBuild;`只有引用是共享的,而不是它的内容?@vaibhavcool20,是的,逻辑上你可以这么说。最好通过我分享的官方链接,它会消除你所有的疑虑。字符串的概念非常广泛,在Java世界中,人们应该非常清楚这一点。愉快的编码,如果你清楚的话,接受这个答案,它将帮助其他人,当我称之为'stringBuildArr[0]=strBuild;`只有引用是共享的,而不是它的内容?@vaibhavcool20,是的,逻辑上你可以这么说。最好通过我分享的官方链接,它会消除你所有的疑虑。字符串的概念非常广泛,在Java世界中,人们应该非常清楚这一点。快乐的编码,如果你清楚的话,接受答案,这将有助于其他人我把它命名为一个问题,因为没有更好的词。“因为复制StringBuilder不是免费的”这是什么意思?@elliot,似乎他不确定如何询问或如何提及,他是新的。@vaibhavcool20这意味着创建StringBuilder
实例的唯一引用副本需要一个复制操作,而这在所有情况下都不是必需的。简而言之,我把它命名为一个问题,因为没有更好的词。“因为复制StringBuilder不是免费的”这是什么意思?@elliot,似乎他不确定如何询问或如何提及,他是新的。@vaibhavcool20这意味着创建StringBuilder
实例的唯一引用副本需要一个复制操作,而这在所有情况下都不是必需的。简言之