我添加了一些带有某些字符的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
Output2:
那么,这些stringbuilder和stringbuffer类的存储如何工作?
答案 0 :(得分:1)
这里没有“问题”,该数组存储对同一strBuild
实例的引用;没有stringBuildArr[0] = strBuild;
的副本,因为复制StringBuilder
不是免费的。但是,如果您想要一个足够简单的副本,请将其更改为
stringBuildArr[0] = new StringBuilder(strBuild);
答案 1 :(得分:1)
Java StringBuilder
是大多数Java程序员都熟悉的类。字符串是不可变的,因此字符串中的每个更改都会导致创建新对象,但是在StringBuilder
或buffer
中它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为。
有关更多信息,请查看官方文档:Java Docs