Java String vs StringBuffer vs StringBuilder 性能比较
package org.onepiece; public class JavaStringTest { public final static int Num = 10000; public static void test1String() { long start =System.currentTimeMillis(); String str = "ROSE"; for (int i=0; i<=Num; i++) { str = str + i + ","; } long ms= System.currentTimeMillis() - start; System.out.println("String:" + ms); } public static void test2StringBuffer() { long start =System.currentTimeMillis(); StringBuffer buffer=new StringBuffer(); for (int i=0; i<=Num; i++) { buffer.append(i + ","); } long ms= System.currentTimeMillis() - start; System.out.println("StringBuffer:" + ms); } public static void test3StringBuilder() { long start =System.currentTimeMillis(); StringBuilder builder=new StringBuilder(); for (int i=0; i<=Num; i++) { builder.append(i + ","); } long ms= System.currentTimeMillis() - start; System.out.println("StringBuilder:" + ms); } }
package org.onepiece; import java.lang.*; public class Main
{ public static void main(String[] args) throws Exception { JavaStringTest.test1String(); JavaStringTest.test2StringBuffer(); JavaStringTest.test3StringBuilder(); } }
String:486
StringBuffer:8
StringBuilder:3
String类是不可变类,任何对String的改变都会引发新的String对象的生成。
StringBuffer、StringBuilder 则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。
StringBuffer和StringBuilder类的区别在于:
StringBuffer是线程安全的。
StringBuilder不是线程安全的。
在单线程中StringBuilder比StringBuffer的性能高。
如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;
如果要在多线程下操作,为了保证线程安全,则要使用StringBuffer类了。让对象自行管理同步的问题。

浙公网安备 33010602011771号