正如我们所知,java 字符串是不可变的,要创建可变字符串,我们可以使用 StringBuffer
或 StringBuilder
。现在,如果我们在 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/