Java 是否应始终首选StringBuilder.append()而不是串联?

Java 是否应始终首选StringBuilder.append()而不是串联?,java,concatenation,stringbuilder,Java,Concatenation,Stringbuilder,我有一些这样的代码: StringBuilder rgba = new StringBuilder(); for (...){ .... rgba.append(value + ", "); } IntelliJ向我显示以下警告: string concatenation as argument to 'stringbuilder.append()' call 从,和其他来源,我了解到连接实际上是创建一个新的字符串对象,它否定了使用StringBuilder的全部意义

我有一些这样的代码:

StringBuilder rgba = new StringBuilder();  
for (...){
....
rgba.append(value + ", ");
}
IntelliJ
向我显示以下警告:

string concatenation as argument to 'stringbuilder.append()' call
从,和其他来源,我了解到连接实际上是创建一个新的字符串对象,它否定了使用
StringBuilder

的全部意义 所以
IntelliJ
建议我使用

rgba.append(value);
rgba.append(", ");  
而不是

rgba.append(value + ", ");  
但这真的会更好吗?
这个代码会更清晰吗?

这会使执行速度更快吗?

在我看来,连接对于开发人员来说更具可读性,但是StringBuilder.append的性能更好

在我看来,连接对于开发人员来说更具可读性,但是StringBuilder.append的性能更好

您所说的是正确的,因为连接和
StringBuilder
与理论上使用它的观点背道而驰,但是我们所讨论的额外性能是难以置信的最小,除非您发现循环有大量的迭代

就代码的清晰性而言,考虑到您正在使用它,我认为double
append
实际上要清晰得多

我认为这两项声明是正确的

Append ", " appended on "value"

其中第二个看起来更简洁,即使代码在技术上更长。

您所说的是正确的,因为级联和
StringBuilder
的混合在理论上不利于使用它,但是,我们所讨论的额外性能是难以置信的最小,除非循环有大量的迭代

就代码的清晰性而言,考虑到您正在使用它,我认为double
append
实际上要清晰得多

我认为这两项声明是正确的

Append ", " appended on "value"

其中第二个看起来更简洁,即使代码在技术上更长。

根据IntelliJ推理:

报告用作参数的字符串连接,以 StringBuffer.append()、StringBuilder.append()或Appendable.append()。 这样的调用可以转换为服务器上的链接追加调用 现有StringBuffer/Builder/Appendable,节省了额外的成本 StringBuffer/Builder分配。此检查忽略编译时间 已计算的字符串连接,当转换为链接时 追加调用只会降低性能


所以,我会说:加油

根据IntelliJ推理:

报告用作参数的字符串连接,以 StringBuffer.append()、StringBuilder.append()或Appendable.append()。 这样的调用可以转换为服务器上的链接追加调用 现有StringBuffer/Builder/Appendable,节省了额外的成本 StringBuffer/Builder分配。此检查忽略编译时间 已计算的字符串连接,当转换为链接时 追加调用只会降低性能


所以,我会说:加油

坦白地说,对于这个特定的场景,我不会再考虑“什么更好”(多好?用哪个标准衡量?)。关于Clear,我想在这里说“同意Intellij”,因为您已经有了一个SB实例,只需再编写一个
append
调用,看起来就更简洁了,实际上,Intellij也提供了有关性能的推理:报告用作StringBuffer.append()、StringBuilder.append()或Appendeable.append()参数的字符串连接,而不是在MixBuffer中抛出连接。这样的调用可以转换为对现有StringBuffer/Builder/Appendable的链式追加调用,从而节省额外StringBuffer/Builder分配的成本。此检查忽略编译时计算的字符串连接,当转换为链式追加调用时,这只会恶化性能。追加代码对于几个月或几年后必须阅读您的代码的人(包括您自己)来说会更清晰。坦白地说,对于这种特殊情况,我不会再考虑“什么更好”(多好?用哪个标准衡量?)。关于更清晰,我会说“同意Intellij“在这里,由于您已经有了一个SB实例,只需再编写一个
append
调用,而不是在MixIntellij中抛出连接,看起来更简洁。实际上Intellij还提供了有关性能的推理:报告字符串连接用作StringBuffer.append()的参数,StringBuilder.append()或可追加。追加()。这样的调用可以转换为对现有StringBuffer/Builder/Appendable的链式追加调用,从而节省额外StringBuffer/Builder分配的成本。此检查忽略编译时计算的字符串连接,当转换为链式追加调用时,这只会降低性能。追加代码对于几个月或几年后必须阅读代码的人(包括您自己)来说会更清晰。
rgba.append(value).append(,“”)
也可以被视为与
rgba.append(value+“,”)
一样清晰(或者更清晰的IMHO,当我想突出显示添加逗号时)
rgba.append(value)。append(“,”
也可以被视为与
rgba.append(value+”,”)
一样清晰(或者更清晰的IMHO,当我想突出显示添加逗号时)