java - StringBuilder 或 StringBuffer 的 toString() 方法会创建一个新的不可变字符串吗?
问题描述
众所周知,java String 是不可变的,要创建可变字符串,我们可以使用StringBuffer
or StringBuilder
。现在,如果我们在 StringBuilder 对象中有一个字符串,并且我们使用它的toString()
方法,那将在字符串池中创建另一个不可变字符串。如果是这样,那么如何避免这种情况。
解决方案
现在,如果我们在 StringBuilder 对象中有一个字符串,并且我们使用它的 toString() 方法,那会在字符串池中创建另一个不可变字符串吗
你没有String
在StringBuilder
. 字符存储在 achar[]
中,当您调用 时toString()
,会创建一个新字符String
:
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
也就是说,创建一个新的String
并不会将其添加到String
池中,因此您无需避免任何事情。
我们使用 StringBuilder 的主要目的是避免不可变的字符串
那不准确。主要目的是避免String
由于多个String
串联而创建多个 s。UsingStringBuilder
允许您使用单个StringBuilder
实例执行所有连接。如果您想要String
表示 的内容,StringBuilder
则无法避免创建一个String
实例。但是,您不必创建内容的String
表示形式StringBuilder
(除非您需要将其传递给需要 a 的方法String
)。
推荐阅读
- javascript - 有人可以澄清一下gamewon对象是一个数组吗?
- c - 包含 Math.h 会导致 cmath 出现错误
- html - 为什么在触摸或聚焦之前必需的文本区域在 Firefox 中有错误边框?
- asp.net-mvc - KendoUI MVC 网格不显示除第一页以外的页面数据
- javascript - 如果任何端口 9229 有什么意义,可以更改吗?
- java - 向 Autodesk 进行身份验证
- unit-testing - 如何在测试时使 Spring boot webflux 在默认 Netty 而不是 Jetty 上启动
- node.js - 是否可以推送文本以提示输入?
- google-cloud-dataflow - 如何通过 gcloud CLI 激活 Dataflow Shuffle 服务
- java - 部分反序列化响应为空