java中string类concat方法和+的区别

请问java中string类concat方法和+的区别

都可以将2个字符串拼接到一块,这一点2这功能相同。

但是 + 还可以将 字符串与非字符串(比如数字),拼接在一起,成为字符串。

要看看他们之间的区别,我们可以从源码分析两者的区别,
concat是String方法,String重载了“+”操作符(提醒下:Java不支持其他操作符的重载)。
concat源码:
[code="java"] public String concat(String str) {

int otherLen = str.length();

if (otherLen == 0) {

return this;
}
char buf[] = new char[count + otherLen];
getChars(0, count, buf, 0);
str.getChars(0, otherLen, buf, count);
return new String(0, count + otherLen, buf);
}[/code]

源码中对String中+操作符的描述如下
[quote] The Java language provides special support for the string concatenation operator ( + ), and for conversion of other objects to strings. String concatenation is implemented through the[size=medium] StringBuilder/size class and its [size=medium]append[/size] method.[/quote]

简单的概括下:String本身是不变的对象,但是string的+号操作符是通过StringBuilder或StringBuffer(可以通过反汇编class文件,看到使用的StringBuilder来实现的。)

以上两个方法中都有开辟(new)以及销毁堆空间的操作,打大量的string操作导致效率很低。
所以在大量操作string字符串时,StringBuilder的append方法是最好的选择

[b]“+”[/b]

在java内部是对+进行了重载,在处理String的过程中要创建一个StringBuffer对象,用StringBuffer对象的append方法对字符串进行连接,最后调用toString方法返回String字符串。
[url]http://book.csdn.net/bookfiles/890/10089027994.shtml[/url]

如果多线程操作String ,+ 和concat应该是有区别的。