问题描述
StringBuilder rgba = new StringBuilder();
for (...){
....
rgba.append(value + ",");
}
IntelliJ
向我显示以下警告:
string concatenation as argument to 'stringbuilder.append()' call
从 here、here 和其他来源我了解到连接实际上是创建一个新的 String 对象,并且否定了使用 StringBuilder
的全部意义。
所以IntelliJ
建议我使用
rgba.append(value);
rgba.append(",");
代替
rgba.append(value + ",");
但这真的会更好吗?
这段代码会更清晰吗?
这会加快执行速度吗?
解决方法
根据 IntelliJ 推理:
报告用作参数的字符串连接到 StringBuffer.append()、StringBuilder.append() 或 Appendable.append()。 这样的调用可能会有利地转变为链式追加调用 现有的 StringBuffer/Builder/Appendable,节省了额外的成本 StringBuffer/Builder 分配。此检查忽略编译时间 评估字符串连接,当转换为链接时 追加调用只会降低性能。
所以,我会说:去吧!
,您所说的是正确的,因为连接和 StringBuilder
的混合在理论上与使用它背道而驰,但我们所谈论的额外性能非常小,除非您循环有大量的迭代。
就代码清晰度而言,我认为双 append
实际上更清晰,因为您无论如何都在使用它。
我将这两个语句视为
Append "," appended on "value"
Append "value"
Append ","
其中第二个实际上看起来更简洁,即使代码在技术上更长。
,在我看来,串联对于开发人员来说更具可读性,但 StringBuilder.append 是高性能的