Android StringBuilder vs String Concatenation

Jer*_*rds 14 string stringbuilder android string-concatenation

我正在阅读此文档页面,http://developer.android.com/reference/android/util/Log.html.

这部分引起了我的注意:

提示:当你拨打电话时不要忘记

Log.v(TAG, "index=" + i);

当您构建要传递给Log.d的字符串时,编译器使用StringBuilder并且至少发生三次分配:StringBuilder本身,缓冲区和String对象.实际上,还有另一个缓冲区分配和复制,对gc的压力更大.这意味着如果您的日志消息被过滤掉,那么您可能正在进行大量工作并产生大量开销.

这意味着Android编译器正在采用字符串连接(+)并将它们转换为StringBuilder和append语句.

我的假设是正确的还是更好地手动使用StringBuilder而不是字符串连接?

Ted*_*opp 9

编译器完全按照您的建议进行隐含.您可以打印生成的.class文件的字节码(使用javap -c),并查看构造和使用的调用StringBuilder.

但是,当字符串连接分布在几行代码上时,通常值得手动执行.编译器通常StringBuilder为每个涉及的String值表达式分配一个单独的+.

  • **"当字符串连接分布在几行代码上时,通常值得手动执行"** - 我只想强调@TedHopp所说的内容,这样就不会丢失.我在大约10行连接250个字符的字符串,App Engine上的cpu时间是350毫秒.当我用一个StringBuilder替换它时,时间减少到50毫秒,其他事情没有改变. (2认同)