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

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

以下代码的执行效果相同:

public class Document1 {
	public static void main (String[] args){
		
		String s1 = new String ("a");
		String s2 = new String ("b");
		String s3 = "c";
		String s4 = "d";

		System.out.printf("s1 + s2: %s\n",s1+s2);
		System.out.printf("s1 concat s2: %s\n",s1.concat(s2));

		System.out.printf("s3 + s4: %s\n",s3+s4);
		System.out.printf("s3 concat s4: %s\n",s3.concat(s4));

		System.out.printf("s1 + s3: %s\n",s1+s3);
		System.out.printf("s1 concat s3: %s\n",s1.concat(s3));
	}
}

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

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

concat源码:

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);  
} 

源码中对String中+操作符的描述如下:

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 StringBuilder(or StringBuffer) class and its append method.

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

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注