java - StringBuilder 或 StringBuffer 的 toString() 方法会创建一个新的不可变字符串吗?

标签 java

正如我们所知,java 字符串是不可变的,要创建可变字符串,我们可以使用 StringBufferStringBuilder。现在,如果我们在 StringBuilder 对象中有一个 String,并且我们使用它的 toString() 方法,那么会在 String 池中创建另一个不可变的 String。如果是这样,那么如何避免这种情况。

最佳答案

Now if we have a String in a StringBuilder object and we use the toString() method of it, will that create another immutable String in the String pool

StringBuilder 中没有String。字符存储在 char[] 中,当您调用 toString() 时,会创建一个新的 String:

public String toString() {
    // Create a copy, don't share the array
    return new String(value, 0, count);
}

也就是说,创建一个新的 String 不会将其添加到 String 池中,因此您无需避免任何事情。

our main purpose of using StringBuilder is to avoid immutable Strings

这不准确。主要目的是避免由于多个 String 连接而创建多个 String。使用 StringBuilder 允许您使用单个 StringBuilder 实例执行所有连接。如果您想要 StringBuilder 内容的 String 表示,您无法避免创建一个 String 实例。但是,您不必创建 StringBuilder 内容的 String 表示(除非您需要将其传递给需要 String 的方法>).

关于java - StringBuilder 或 StringBuffer 的 toString() 方法会创建一个新的不可变字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50112286/

相关文章:

java - 二叉搜索树的搜索和比较内容的大O

java - 使用 apache xml rpc 客户端 3.1.3 发送复杂类型

java - Application Insights Log4j 按日志文件名筛选

java - 当属性丢失时 Spring Boot 不会失败

java - Eclipse 支持 maven 的 Web 应用程序引用工作区项目,但在运行 Tomcat 服务器时未部署这些项目

java - 为什么 ChannelHandlerContext.writeAndFlush() 不处理我的字符串?

java - 使用 jboss 使用 web 服务

java - 将 int 转换为 float 并返回不会给出初始值

java - GXT3 : How to implement svg buttons

java - Spring boot Kafka 不工作 - 消费者没有收到消息