首页 > 解决方案 > StringBuilder 或 StringBuffer 的 toString() 方法会创建一个新的不可变字符串吗?

问题描述

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

标签: java

解决方案


现在,如果我们在 StringBuilder 对象中有一个字符串,并且我们使用它的 toString() 方法,那会在字符串池中创建另一个不可变字符串吗

你没有StringStringBuilder. 字符存储在 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)。


推荐阅读