String,StringBuilber,StringBuffer 區別
String和StringBuilder的效率對比
StringBullder和StringBuffer的效率對比
String和StringBuilder的本質區別
-- String是一個不可改變的字符序列
public class StringDemo { public static void main(String[] args) { //字符串不可改變字符序列 //String類比較特殊,直接寫一個雙引號,實際上創建了一個字符串對象, // 如何校驗,s打點調方法,證明它是一個對象 String s = "ABC"; //s又等於了一次雙引號,實際記錄一個新的地址值, s = "BCD"; } } --StringBuilder是一個可以改變的字符序列,字符串緩沖區 public class StringBullderDemo { public static void main(String[] args) { //創建了一個StringBuilder對象,存入了一串字符序列 StringBuilder sb = new StringBuilder("aaabbbccc"); // sb.delete()刪除索引位置上的元素 sb.delete(1,3); System.out.println(sb); //abbbccc } }
字符串拼接使用誰?
String = 23958毫秒
StringBuilder = 24毫秒
使用StringBuilder效率比String高
public class stringVSStringBuilder { public static void main(String[] args) { /* 第一次結果:24毫秒 long start = System.currentTimeMillis(); StringBuilder sb = new StringBuilder(""); for (int i = 0; i <100000 ; i++) { sb.append(i); } long end = System.currentTimeMillis(); System.out.println(sb); System.out.println(end-start);*/ //第二次結果23958 long start = System.currentTimeMillis(); String s = ""; for (int i = 0; i < 100000; i++) { s += i; } long end = System.currentTimeMillis(); System.out.println(s); System.out.println(end - start); } }
String在堆內存中的解析圖

StringBullder和StringBuffer的區別
相同點:兩者方法基本一致,
不同點:
StringBuffer是JDK1.0出現的,多線程安全,效率低,但同步
StringBuilder是JDK1.5出現的,線程不安全,效率快,不同步的(推薦Dao層的sql語句拼接,因為Dao數據訪問層一般都是單線程執行)