java - 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 类的存储是如何工作的呢?
解决方案
这里没有“问题”,数组存储了对同一个strBuild
实例的引用;没有副本,stringBuildArr[0] = strBuild;
因为复制StringBuilder
不是免费的。但是,如果您想要一个足够简单的副本,请将其更改为
stringBuildArr[0] = new StringBuilder(strBuild);
推荐阅读
- reactjs - 检查 `InputOption` 的渲染方法
- typescript - 将 VSCode 指向独立于 repo 的 TSConfig
- react-native - scrollTopTop 侦听器在组件中不起作用(React-Native)
- java - 引起:java.lang.ClassNotFoundException:org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata
- kotlin - 我是否以这种方式实现适配器模式?
- javascript - 使用 PHP 刷新/更新从 mySQL 加载的数据表中的数据
- python - 执行 conda-build 找不到任何文件
- php - 子目录中的 Wordpress 实例。REST API 灾难的秘诀?
- aws-api-gateway - 如何将当前时间戳设置为 AWS API Gateway 内集成请求中的变量
- assembly - 向 -Inf 四舍五入的快速浮点到整数公式:它是如何工作的?