StringBuilder和StringBuffer的區別
這里從兩個角度(性能、執行緒安全)去分析與區別,
StringBuilder與StringBuffer類結構
StringBuilder類繼承結構

StringBuffer類繼承結構

StringBuilder方法串列

StringBuffer方法串列
StringBuilder與StringBuffer性能比較
下面通過一個DEMO來對比StringBuilder與StringBuffer的性能,順帶測驗String的性能,
/**
* Copyright (C), 2000-2021, XXX有限公司
* FileName: StringBufferBuilderTest
* Author: wangyetao
* Date: 21-11-6 00:24:15
* Description: StringBuilder和StringBuffer區別
* <p>
* History:
* <author> 作者姓名
* <time> 修改時間
* <version> 版本號
* <desc> 版本描述
*/
package simple.callback.stringbufferbuilder;
/**
* @ClassName: StringBufferBuilderTest
* @Description: java類描述
* @Author: wangyetao
* @Date: 21-11-6 00:24:15
*/
public class StringBufferBuilderTest {
public static void main(String[] args) {
//int performanceTestLength = 10000000;//1000萬
int performanceTestLength = 10000;
System.out.println("String性能測驗-length-" + performanceTestLength + ":" + appendStringPerformanceTest(performanceTestLength) + "ms");
System.out.println("String2性能測驗-length-" + performanceTestLength + ":" + appendString2PerformanceTest(performanceTestLength) + "ms");
System.out.println("StringBuffer性能測驗-length-" + performanceTestLength + ":" + appendStringBufferPerformanceTest(performanceTestLength) + "ms");
System.out.println("StringBuilder性能測驗-length-" + performanceTestLength + ":" + appendStringBuilderPerformanceTest(performanceTestLength) + "ms");
}
/**
* String性能測驗
*
* @param length 執行次數
* @return 執行時長(ms)
*/
private static long appendStringPerformanceTest(int length) {
long start = System.currentTimeMillis();
String str = "";
for (int i = 0; i < length; i++) {
str += "StringBuilder和StringBuffer區別";
}
return System.currentTimeMillis() - start;
}
/**
* String性能測驗2
*
* @param length 執行次數
* @return 執行時長(ms)
*/
private static long appendString2PerformanceTest(int length) {
long start = System.currentTimeMillis();
String str = new String("");
for (int i = 0; i < length; i++) {
str += "StringBuilder和StringBuffer區別";
}
return System.currentTimeMillis() - start;
}
/**
* StringBuffer性能測驗
*
* @param length 執行次數
* @return 執行時長(ms)
*/
private static long appendStringBufferPerformanceTest(int length) {
long start = System.currentTimeMillis();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < length; i++) {
stringBuffer.append("StringBuilder和StringBuffer區別");
}
return System.currentTimeMillis() - start;
}
/**
* StringBuilder性能測驗
*
* @param length 執行次數
* @return 執行時長(ms)
*/
private static long appendStringBuilderPerformanceTest(int length) {
long start = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < length; i++) {
stringBuilder.append("StringBuilder和StringBuffer區別");
}
return System.currentTimeMillis() - start;
}
}
性能比較輸出結果:
String性能測驗-length-10000:2324ms
String2性能測驗-length-10000:1497ms
StringBuffer性能測驗-length-10000:1ms
StringBuilder性能測驗-length-10000:0ms
Process finished with exit code 0
String性能測驗-length-10000:1967ms
String2性能測驗-length-10000:1298ms
StringBuffer性能測驗-length-10000:1ms
StringBuilder性能測驗-length-10000:0ms
Process finished with exit code 0
String性能測驗-length-5000:702ms
String2性能測驗-length-5000:400ms
StringBuffer性能測驗-length-5000:1ms
StringBuilder性能測驗-length-5000:0ms
Process finished with exit code 0
StringBuilder與StringBuffer執行緒安全分析
從jdk原始碼上可以看到:
java.lang.StringBuilder#append(java.lang.String)不是執行緒安全的;
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
java.lang.StringBuffer#append(java.lang.String)是執行緒安全的;
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
java.lang.AbstractStringBuilder#append(java.lang.String)
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
總結
| 拼接效率 | 低 | 中 | 高 | 很高 |
| StringBuilder | ||||
| StringBuffer | ||||
| String |
| 執行緒安全 | 安全 | 不安全 |
| StringBuilder | ||
| StringBuffer | ||
| String |
記錄與總結,2021年 11月 06日 星期六 20:22:42 CST,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352120.html
標籤:其他
上一篇:CTF 基本知識
