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

问题描述 投票:0回答:2

我已经在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类的存储如何工作?

java string stringbuilder stringbuffer
2个回答
0
投票

这里没有“问题”,该数组存储对同一strBuild实例的引用; stringBuildArr[0] = strBuild;没有复制,因为复制StringBuilder不是免费的。但是,如果您想要的副本足够简单,请将其更改为

stringBuildArr[0] = new StringBuilder(strBuild);

0
投票

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

Java Docs

© www.soinside.com 2019 - 2024. All rights reserved.