消息来源告诉我们concat
的实施方式如下:
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
对于字符串,+
实现是否有所不同?怎么样? +
和concat
之间是否存在性能差异?何时应该选择另一个?
答案 0 :(得分:7)
这是我刚刚做的一个测试:
我用这3条指令创建了一个类:
String s1 = "foo";
String s2 = "bar";
String s3 = s1 + s2;
然后我使用生成的.class文件,并使用JAD反编译器反编译。 这就是代码在重新生成的源中的显示方式:
String s = "foo";
String s1 = "bar";
String s2 = (new StringBuilder()).append(s).append(s1).toString();
所以:这是+和concat之间的区别。
我猜concat()总是比StringBuilder更好,因为它需要创建更少的对象。如果要在循环中重复追加字符串,可以选择StringBuilder;在这种情况下,concat可能每次都会创建一个新的String,而StringBuilder可能只是扩展内部缓冲区。但是,如果StringBuilder在最后一个场景中是最好的,我们可以说在循环中仍然是concat()比+更好。