Java中的String、StringBuffer和StringBuilder的区别

String是不可变的,StringBuffer是可变的;StringBuffer是线程安全的,StringBuilder是非线程安全的。
因而在大部分情况下字符串的拼接速度为:StringBuilder>StringBuffer>String
解释如下:
因为String是不可变的(通过ide的debugger可以发现其属性大都为final类型),因此每次对其操作改变其变量值,其实是生成一个新的对象,然后将变量引用指向新对象;因此速度慢。

StringBuffer则不同,对其操作即直接操作对象指向的引用,无需产生新对象,速度很快;它是线程安全的,在维护多线程的同步等也会消耗一点性能。

StringBuilder是jdk5之后新增的,其用法与StringBuffer完全一致,但它是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。

/**
 * String测试
 * @author intrl
 * @date 2010-12-7
 * @version 1.0
 */
public class StringTest {
	
	public static void append(String text) {
		text = text + "-free";
	}

	public static void append(StringBuffer text) {
		text = text.append("-free");
	}

	public static void main(String args[]) {
		String string = new String("java");
		StringBuffer stringBuffer = new StringBuffer("java");
		/**
		 * 注意方法的传参只是把string所指的引用copy一份给text
		 */
		append(string);
		System.out.println(string);//java
		append(stringBuffer);
		System.out.println(stringBuffer);//java-free
	}
}

Mistruster -
共有0个回答