+
算子
String s = s1 + s2
在幕后将其翻译为:
String s = new StringBuilder(s1).append(s2).toString();
想象一下,如果您在
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内容复制到此新数组。实际上需要的工作量少于
+操作员。
StringBuilder.append()
维护一个内部
char[]数组,该数组在需要时会增长。
char[]如果内部空间足够大,则不会创建任何额外的空间。
stringBuilder.append(s1.concat(s2))
也表现不佳,因为
s1.concat(s2)创建一个额外的
char[]数组和副本
s1,并
s2给它只是新的数组内容复制到内部
StringBuilder``char[]。
话虽如此,您应该一直使用
append()并附加原始字符串(您的第一个代码段是正确的)。



