我已经在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);
Java StringBuilder是大多数Java程序员都熟悉的类,字符串是不可变的。因此,每次更改字符串都会导致在stringbuilder中创建一个新对象,或者对其可变进行缓冲,这意味着它将在同一对象上工作,因此删除将删除该内容,因此指向同一对象的所有引用都将具有相同的行为。有关更多信息,请查看官方文档。