String、StringBuffer和StringBuilder的区别
2017-11-11 21:54
267 查看
String 字符串常量,任何对String的改变都会引发新的String对象的生成。
StringBuffer 字符串变量(线程安全)支持并发操作,线程安全的,适合多线程中使用。
StringBuilder 字符串变量(非线程安全),不支持并发操作,线性不安全的,不适合多线程中使用,但其在单线程中的性能比StringBuffer高。
任何对StringBuffer和StringBuilder所指代的字符串的改变都不会产生新的对象。
接下来,我直接贴上测试过程和结果的代码,一目了然:
运行结果:
StringBuffer与StringBuilder常用方法
StringBuffer 字符串变量(线程安全)支持并发操作,线程安全的,适合多线程中使用。
StringBuilder 字符串变量(非线程安全),不支持并发操作,线性不安全的,不适合多线程中使用,但其在单线程中的性能比StringBuffer高。
任何对StringBuffer和StringBuilder所指代的字符串的改变都不会产生新的对象。
接下来,我直接贴上测试过程和结果的代码,一目了然:
public class StringTest { public static String BASEINFO = "Mr.Y"; public static final int COUNT = 2000000; /** * 执行一项String赋值测试 */ public static void doStringTest() { String str = new String(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT / 100; i++) { str = str + "miss"; } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used String."); } /** * 执行一项StringBuffer赋值测试 */ public static void doStringBufferTest() { StringBuffer sb = new StringBuffer(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT; i++) { sb = sb.append("miss"); } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used StringBuffer."); } /** * 执行一项StringBuilder赋值测试 */ public static void doStringBuilderTest() { StringBuilder sb = new StringBuilder(BASEINFO); long starttime = System.currentTimeMillis(); for (int i = 0; i < COUNT; i++) { sb = sb.append("miss"); } long endtime = System.currentTimeMillis(); System.out.println((endtime - starttime) + " millis has costed when used StringBuilder."); } /** * 测试StringBuffer遍历赋值结果 * * @param mlist */ public static void doStringBufferListTest(List<String> mlist) { StringBuffer sb = new StringBuffer(); long starttime = System.currentTimeMillis(); for (String string : mlist) { sb.append(string); } long endtime = System.currentTimeMillis(); System.out.println(sb.toString() + "buffer cost:" + (endtime - starttime) + " millis"); } /** * 测试StringBuilder迭代赋值结果 * * @param mlist */ public static void doStringBuilderListTest(List<String> mlist) { StringBuilder sb = new StringBuilder(); long starttime = System.currentTimeMillis(); for (Iterator<String> iterator = mlist.iterator(); iterator.hasNext();) { sb.append(iterator.next()); } long endtime = System.currentTimeMillis(); System.out.println(sb.toString() + "builder cost:" + (endtime - starttime) + " millis"); } public static void main(String[] args) { doStringTest(); doStringBufferTest(); doStringBuilderTest(); List<String> list = new ArrayList<String>(); list.add(" I "); list.add(" like "); list.add(" BeiJing "); list.add(" tian "); list.add(" an "); list.add(" men "); list.add(" . "); doStringBufferListTest(list); doStringBuilderListTest(list); } }
运行结果:
620 millis has costed when used String. 64 millis has costed when used StringBuffer. 24 millis has costed when used StringBuilder. I like BeiJing tian an men . buffer cost:1 millis I like BeiJing tian an men . builder cost:0 millis
StringBuffer与StringBuilder常用方法
相关文章推荐
- Java中String,StringBuffer,StringBuilder区别与联系
- String,StringBuffer与StringBuilder的区别
- JAVA数据结构之String、StringBuffer和StringBuilder之间的区别
- String、StringBuffer、StringBuilder之间的区别-整理中
- String、StringBuffer与StringBuilder之间区别
- Java: String, StringBuilder和StringBuffer 三者之间的区别
- String、StringBuffer与StringBuilder的区别
- String、StringBuffer与StringBuilder之间区别
- String,StringBuffer与StringBuilder的区别??
- string stringbuffer 和stringbuilder的区别
- String、StringBuffer、与StringBuilder的区别
- String、StringBuffer和StringBuilder的区别
- 面试必备:String,StringBuffer,StringBuilder区别
- Java—String、StringBuffer、StringBuilder的用法与区别
- String,StringBuffer,StringBuilder的区别
- java中String、StringBuffer、StringBuilder的区别
- String,StringBuffer与StringBuilder的区别??
- String,StringBuffer与StringBuilder的区别
- StringBuilder的用法及String,StringBuffer与StringBuilder的区别
- String,StringBuffer和StringBuilder的区别