Java中String StringBuffer StringBuilder比较

简述:

试着比较下Java中String StringBuffer StringBuilder的性能


知识点:

String StringBuffer StringBuilder

1.  test1() 结果可知String的效率最好

result字符串先做”Hello“ + ”World!" 处理,然后才赋值给result,之开辟了一次内存段


2.  test2 ()结果StringBuilder效率最好

getString函数执行的是 先开辟一个内存段在合并(扩展)内存


3. test3 ()结果String效率最差

String对象是不可变对象,每次“+=” 操作都会构造新的String对象


代码:

package test.stringbuilder;

/**
 * compare the efficiency between String and StringBuffer and StringBuilder
 */

public class TestString_StringBuffer_StringBuilder {
	private static long startTime;
	private static long endTime;
	private static double timeCost;
	public static void main(String[] args){
		test1();
		test2();
		test3();
	}
	
	//test1
	public static void test1(){
		System.out.println("TEST_1:");
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			String result = "Hello" + "World!";
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of String:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			StringBuffer result = new StringBuffer().append("Hello").append("World!");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of StringBuffer:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			StringBuilder result = new StringBuilder().append("Hello").append("World!");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of StringBuilder:  " + timeCost + "(second)");
	}
	
	//test2
	public static String getStringByString(String s1, String s2){
		return s1 + s2;
	}
	public static String getStringByStringBuffer(String s1, String s2){
		return new StringBuffer().append(s1).append(s2).toString();
	}
	public static String getStringByStringBuilder(String s1, String s2){
		return new StringBuilder().append(s1).append(s2).toString();
	}
	public static void test2(){
		System.out.println("TEST_2:");
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			getStringByString("Hello","World!");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of String:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			getStringByStringBuffer("Hello","World!");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of StringBuffer:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000000;i++){
			getStringByStringBuilder("Hello","World!");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("cost of StringBuilder:  " + timeCost + "(second)");
	}
	
	//Test3 
	public static void test3(){
		System.out.println("TEST_3:");
		String rawStr = "Start:";
		StringBuffer rawStringBuffer = new StringBuffer("Start:");
		StringBuilder rawStringBuilder = new StringBuilder("Start:");
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 10000;i++){
			rawStr += "first,";
			rawStr += "second,";
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("10k cost of String:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 100000;i++){
			rawStringBuffer.append("first,").append("second,");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("100k cost of StringBuffer:  " + timeCost + "(second)");
		
		startTime = System.currentTimeMillis();
		for(int i = 0;i < 100000;i++){
			rawStringBuilder.append("first,").append("second,");
		}
		endTime = System.currentTimeMillis();
		timeCost = (endTime - startTime) / (1000.0);
		System.out.println("100k cost of StringBuilder:  " + timeCost + "(second)");
	}
}

输出:

Java中String StringBuffer StringBuilder比较_第1张图片

你可能感兴趣的:(java,String,Class,扩展)