我试图了解什么是最佳实践,以及为什么要在不同情况下串联字符串文字和变量。例如,如果我有这样的代码
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA") .append(B_String).append("CCCCCCCCCCC").append(D_String) .append("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE") .append("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
这是这样做的方式吗?从这篇文章中,我注意到+Strings上的运算符创建了一个StringBuilder的新实例,连接了操作数,并返回了String转换,这似乎比仅仅调用还要多.append();所以如果这是真的,那是不可能的。但是那又如何String.concat()呢?是否适合.append()用于每个串联?或仅用于变量,文字可以追加.concat()吗?
+
.append()
String.concat()
.concat()
StringBuilder sb = new StringBuilder("AAAAAAAAAAAAA") .append(B_String.concat("CCCCCCCCCCC")).append(D_String .concat("EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE") .concat("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
应对这些情况的最佳做法和性能的一般规则是什么?我的假设是正确的,+真的不应该使用吗?
String s = s1 + s2
在幕后将其翻译为:
String s = new StringBuilder(s1).append(s2).toString();
想象一下,如果您在s1 + s2这里,它会增加多少额外的工作:
s1 + s2
stringBuilder.append(s1 + s2)
代替:
stringBuilder.append(s1).append(s2)
值得注意的是:
String s = s1 + s2 + s3 + ... +sN
转换为:
String s = new StringBuilder(s1).append(s2).append(s3)...apend(sN).toString();
concat()
String s = s1.concat(s2);
String创建char[]同时适合s1和的数组s2。将副本s1和s2内容复制到此新数组。实际上需要的工作量少于+操作员。
String
char[]
s1
s2
StringBuilder.append()
维护一个内部char[]数组,该数组在需要时会增长。char[]如果内部空间足够大,则不会创建任何额外的空间。
stringBuilder.append(s1.concat(s2))
也表现不佳,因为s1.concat(s2)创建一个额外的char[]数组和副本s1,并s2给它只是新的数组内容复制到内部StringBuilder``char[]。
s1.concat(s2)
StringBuilder``char[]
话虽如此,您应该一直使用append()并附加原始字符串(您的第一个代码段是正确的)。
append()