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而不是字符串连接?
编译器完全按照您的建议进行隐含.您可以打印生成的.class文件的字节码(使用javap -c
),并查看构造和使用的调用StringBuilder
.
但是,当字符串连接分布在几行代码上时,通常值得手动执行.编译器通常StringBuilder
为每个涉及的String值表达式分配一个单独的+
.