效率的比较:
`public class StringTest {
public static void main(String[] args) {
test();
}
public static void test(){
/**
* @author:huazeqi
* @Date:2021/6/4 23:15
* @Description:String效率测试
**/
String str = "hua";
long l = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
str = str + "zeqi";
}
long l1 = System.currentTimeMillis();
System.out.println("String耗时:" + (l1 - l));
/**
* @author:huazeqi
* @Date:2021/6/4 23:15
* @Description:StringBuffer效率测试
**/
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("hua");
long l2 = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
stringBuffer = stringBuffer.append("zeqi");
}
long l3 = System.currentTimeMillis();
System.out.println("StringBuffer耗时:" + (l3 - l2));
/**
* @author:huazeqi
* @Date:2021/6/4 23:15
* @Description:StringBuilder效率测试
**/
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("hua");
long l4 = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
stringBuilder = stringBuilder.append("zeqi");
}
long l5 = System.currentTimeMillis();
System.out.println("StringBuilder耗时:" + (l5 - l4));
}
}
`
由此可以得出拼接效率:StringBuilder>StringBuffer>String。
同时测试出百万级以内,StringBuilder和StringBuffer差别不大,百万级以上区别明显,当然这跟计算机计算能力有关
至于为什么StringBuilder效率大于StringBuffer见下图:
StringBuffer对方法做了线程安全处理,而StringBuilder并没有做线程安全处理,提高了线程安全,牺牲了效率。
。