Java StringBuilder.toString是否保留生成的字符串?

Java StringBuilder.toString是否保留生成的字符串?,java,android,stringbuilder,Java,Android,Stringbuilder,我正在创建一个StringBuilder来收集定期刷新到服务器的字符串。如果刷新失败,我希望保留字符串以便下次重试,尽管在这段时间内,我可能会收到其他要发送的字符串,这些字符串必须添加到StringBuilder中 我想知道的是,最有效的方法是什么,因为这是在Android应用程序中进行的,电池使用和CPU使用是一个大问题。调用StringBuilder的toString()函数是否存储它在内部返回的结果字符串,以便后续调用不必复制所有原始字符串?或者,如果调用失败,我是否应该创建一个新的Str

我正在创建一个StringBuilder来收集定期刷新到服务器的字符串。如果刷新失败,我希望保留字符串以便下次重试,尽管在这段时间内,我可能会收到其他要发送的字符串,这些字符串必须添加到StringBuilder中

我想知道的是,最有效的方法是什么,因为这是在Android应用程序中进行的,电池使用和CPU使用是一个大问题。调用StringBuilder的toString()函数是否存储它在内部返回的结果字符串,以便后续调用不必复制所有原始字符串?或者,如果调用失败,我是否应该创建一个新的StringBuilder,并使用toString()的返回值进行初始化?

以下是:

具有这些参数的参数为:

public String(char value[], int offset, int count) {
    if (offset < 0) {
        throw new StringIndexOutOfBoundsException(offset);
    }
    if (count < 0) {
        throw new StringIndexOutOfBoundsException(count);
    }
    // Note: offset or count might be near -1>>>1.
    if (offset > value.length - count) {
        throw new StringIndexOutOfBoundsException(offset + count);
    }
    this.offset = 0;
    this.count = count;
    this.value = Arrays.copyOfRange(value, offset, offset+count);
}
公共字符串(字符值[],整数偏移量,整数计数){
如果(偏移量<0){
抛出新StringIndexOutOfBoundsException(偏移量);
}
如果(计数<0){
抛出新StringIndexOutOfBoundsException(计数);
}
//注意:偏移量或计数可能接近-1>>>1。
如果(偏移量>value.length-计数){
抛出新StringIndexOutOfBoundsException(偏移量+计数);
}
这个偏移量=0;
this.count=计数;
this.value=Arrays.copyOfRange(值、偏移量、偏移量+计数);
}
因此,是的,它每次都会创建一个新的
字符串
,是的,它每次都会复制
char[]


需要注意的是,这是
toString
的一个实现,而另一个实现可能明显不同。

这将是一个实现细节。因为java字符串是不可变的,所以正确的impl可以选择从StringBuilder.toString()共享或创建新字符串,即使它不是必需的


正如大家所说,您可以进行测试,看看这对您来说是否真的是一个性能问题。如果是一个(笨重的)解决方法,则是包装StringBuilder并缓存生成的字符串。您可以使用脏标志指示内容已修改。

StringBuilder.toString API表示已分配并初始化一个新的字符串对象,以包含此对象当前表示的字符序列

public String(char value[], int offset, int count) {
    if (offset < 0) {
        throw new StringIndexOutOfBoundsException(offset);
    }
    if (count < 0) {
        throw new StringIndexOutOfBoundsException(count);
    }
    // Note: offset or count might be near -1>>>1.
    if (offset > value.length - count) {
        throw new StringIndexOutOfBoundsException(offset + count);
    }
    this.offset = 0;
    this.count = count;
    this.value = Arrays.copyOfRange(value, offset, offset+count);
}