我们知道,java String是不可变的,并且我们可以使用StringBuffer或创建可变的String StringBuilder.现在,如果我们在StringBuilder对象中有一个String并且我们使用toString()它的方法,那么它将在String池中创建另一个不可变的String.如果是这样,那么如何避免这种情况.
Era*_*ran 10
现在,如果我们在StringBuilder对象中有一个String并且我们使用它的toString()方法,那么它将在String池中创建另一个不可变的String
你没有String在StringBuilder.字符存储在a中char[],当您调用时toString(),String会创建一个new :
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
Run Code Online (Sandbox Code Playgroud)
也就是说,创建一个新的String不会将它添加到String池中,所以没有什么可以避免的.
我们使用StringBuilder的主要目的是避免不可变的字符串
那不准确.主要目的是避免String由于多个String连接而创建多个s .使用StringBuilder允许您使用单个StringBuilder实例执行所有连接.如果要String表示其内容StringBuilder,则无法避免创建一个String实例.但是,您不必创建内容的String表示形式StringBuilder(除非您需要将其传递给需要a的方法String).
toString()这些类中的实现看起来像:
return new String(value, 0, count); // StringBuilder
return new String(toStringCache, true); // StringBuffer
Run Code Online (Sandbox Code Playgroud)
这些不是文字,它们创建的新String对象不会最终出现在字符串池中.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |