分别使用使用这三种来拼接字符串,对比各自损耗的时间:
通过测试:java
package com.test; public class Main{ public static void main(String[] args){ testString(); testStringBuffer(); testStringBuilder(); } private static void testStringBuilder() { long begin = System.currentTimeMillis(); StringBuilder str = new StringBuilder(""); for (int i = 0; i < 30000; i++) { str.append(i); } long end = System.currentTimeMillis(); long time = end - begin; System.out.println("-------------StringBuilder性能快--------------"); System.out.println(time); } private static void testStringBuffer() { long begin = System.currentTimeMillis(); StringBuffer str = new StringBuffer(""); for (int i = 0; i < 30000; i++) { str.append(i); } long end = System.currentTimeMillis(); long time = end - begin; System.out.println("------------StringBuffer安全的---------------"); System.out.println(time); } //String 作作字符串拼接的时候,性能极低,每次拼接的时候对象改变 public static void testString(){ long begin = System.currentTimeMillis(); String str = ""; /* for (int i = 0; i < 30000; i++) { str += i; }*/ for(Integer i =0; i< 30000; i++){ str += i.toString(); } long end = System.currentTimeMillis(); long time = end - begin; System.out.println("-----------String----------------"); System.out.println(time); } }
结论:之后拼接字符串,通通使用StringBuffer/StringBuilder,不要使用String。数组
String和StringBuilder以及StringBuffer的区别:
StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的。安全
惟一的区别(建议使用StringBuilder):
StringBuffer:StringBuffer中的方法都使用synchronized修饰符,表示同步的在多线程并发的时候能够保证线程安全,保证线程安全的时候,性能(速度)较低。
StringBuilder:StringBuilder没有使用synchronized修饰符,不安全,但性能高。
StringBuilder sb = new StringBuilder ()等价于…new StringBuilder(16)(API可见..) 使用StringBUilder无参数的构造器,在底层建立一个长度为16的char数组:
char[] value = new char[16];
此时该数组只能存储16字符,若是超过了,得自动扩容:
自动扩容(建立长度更大得数组,再把以前得数组拷贝到新数组)
此时性能极低,通常得,咱们事先知道大概须要存储多少字符,在构造器中就应该设置。多线程