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

时间:2019-11-18 05:58:46

标签: java string stringbuilder stringbuffer

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

2 个答案:

答案 0 :(得分:1)

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

stringBuildArr[0] = new StringBuilder(strBuild);

答案 1 :(得分:1)

Java StringBuilder是大多数Java程序员都熟悉的类。字符串是不可变的,因此字符串中的每个更改都会导致创建新对象,但是在StringBuilderbuffer中它是可变的。这意味着它将在同一对象上工作,因此删除将删除内容,因此指向同一对象的所有引用将具有相同的行为。

有关更多信息,请查看官方文档:Java Docs