Java中String StringBuffer StringBuilder比较

来源:互联网 发布:知乎指数 编辑:程序博客网 时间:2024/06/05 06:11

简述:

试着比较下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();}//test1public 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)");}//test2public 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)");}}

输出:


原创粉丝点击