每次调用 StringBuffer#toString 和 StrinBuilder#toString 都会从字符串池中返回新实例还是实例?

Jee*_*van 4 java string stringbuilder stringbuffer

我的问题是我是否使用 StringBuffer(或 StringBuilder),以及我是否多次在实例上调用 toString 方法。StringBuffer 每次都会返回新的 String 实例还是从 String 池中返回 String?(假设我在两次调用之间没有对 StringBuffer 进行任何更改)

Sur*_*tta 5

根据toString()的文档StringBuffer

转换为表示此字符串缓冲区中数据的字符串。分配并初始化一个新的 String 对象,以包含当前由该字符串缓冲区表示的字符序列。然后返回此字符串。对字符串缓冲区的后续更改不会影响字符串的内容。

因此,分配并初始化了一个新的 String 对象

String objects通过 new 运算符分配的存储在堆中,并且对于相同的内容没有共享存储,因为String文字存储在公共池中。

String s1 = "Hello";              // String literal
String s2 = "Hello";              // String literal
String s3 = s1;                   // same reference
String s4 = new String("Hello");  // String object
String s5 = new String("Hello");  // String object
Run Code Online (Sandbox Code Playgroud)

在哪里 s1 == s2 == s3 but s4 != s5