StringBuffer、StringBuilder和String最大的不同在於它們兩個都是屬於可變的序列 ,意思是它們不像String 一樣,一旦創建了以後,在String Pool(字串池) 就不會再被更動
底層上
String 在創建時,在屬性上使用char[] final value 進行宣告
StringBuffer 、StringBuilder 則是使用char[] value 進行宣告
💡JDK9及之後都是使用byte[] 的基本類型
StringBuffer 、StringBuilder 的差別在於
StringBuffer 是使用synchronized 去進行字串的創建,在多線程 的狀況下,它是線程安全的StringBuilder 沒有使用synchronized 去進行字串的創建,在多線程 的狀況下,它有可能會因為多線程 的狀況造成問題💡依照線程的需求可以斟酌使用這兩個類去進行字串的創建,StringBuilder 對比StringBuffer 來說效率會比較高一點
String str1 = "hello";
StringBuffer str2 = new StringBuffer("hello");
StringBuilder str3 = new StringBuilder("hello");
StringBuilder str4 = new StringBuilder();
使用StringBuilder str4 = new StringBuilder(); 時,預設構造器 的長度會是16 ,當長度不夠時,每一次的擴容 都會增加原有長度 的2倍+2
在開發中
多線程 的狀況,且常常需要修改字串,使用StringBuffer 較為適合非多線程 的狀況,且常常需要修改字串,使用StringBuilder 較為適合