首页 > 解决方案 > stringbuffer/stringbuilder 如何在内存中工作?stringbuilder.delete 函数是如何工作的?

问题描述

我添加了一些带有一些字符的 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 类的存储是如何工作的呢?

标签: javastringstringbuilderstringbuffer

解决方案


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

stringBuildArr[0] = new StringBuilder(strBuild);

推荐阅读