`

String StringBuilder StringBuffer "..." 4种的效率

    博客分类:
  • J2SE
JVM 
阅读更多

"..." +"..."       直接字面值的操作最快,因为 jvm 直接将其解释为 1个字符串

String 对象     的操作 比较耗费时间,

StringBuilder 还可以,非线程安全的

StringBuffer  还行,线程安全,比 StringBuilder 慢点,

 

大多数情况下,效率上:

"..." + "..."      >      StringBuilder      >      StringBuffer      >      String对象+String对象

 

测试类:

package test;

public class StringAddTest {
	private final static int repeatCount = 10000000;

	public void testStringDirect() {
		long begin = System.currentTimeMillis();
		for (int i = 0; i < repeatCount; i++) {
			String s = "abc" + "_opq_" + "xyz";
		}
		long over = System.currentTimeMillis();
		System.out.println("\"...\"+\"...\" 直接相加:" + (over - begin) + " millseconds ");
	}

	public void testStringBuffer() {
		long begin = System.currentTimeMillis();
		for (int i = 0; i < repeatCount; i++) {
			StringBuffer s = new StringBuffer();
			s.append("abc").append("_opq_").append("xyz");
		}
		long over = System.currentTimeMillis();
		System.out.println("StringBuffer 的 append() : " + (over - begin) + " millseconds ");
	}

	public void testStringBuilder() {
		long begin = System.currentTimeMillis();
		for (int i = 0; i < repeatCount; i++) {
			StringBuilder s = new StringBuilder();
			s.append("abc").append("_opq_").append("xyz");
		}
		long over = System.currentTimeMillis();
		System.out.println("StringBuilder 的 append() : " + (over - begin) + " millseconds ");
	}

	public void testStringObject() {
		long begin = System.currentTimeMillis();
		for (int i = 0; i < repeatCount; i++) {
			String s1 = "abc";
			String s2 = "_opq_";
			String s3 = "xyz";
			String s = s1 + s2 + s3;
		}
		long over = System.currentTimeMillis();
		System.out.println("String 对象 相加, 直接相加:" + (over - begin) + " millseconds ");
	}

	public static void main(String[] args) {
		StringAddTest st = new StringAddTest();
		st.testStringDirect();
		st.testStringBuffer();
		st.testStringBuilder();
		st.testStringObject();
	}
}
 
分享到:
评论
1 楼 q7779062 2011-10-06  
你再测试下吧,在千万级别的操作下,String对象拼接和StringBuffer的append速度几乎差不多,而且对象拼接有时还比StringBuffer还要快,应该是StringBuffer的线程同步扯了后腿。
其他不多说了,直接“+”是10毫秒以内级别的,StringBuilder的append次之,但速度相比要慢很多,但也是仅次于直接“+”操作的。。。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics