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數據訪問層一般都是單線程執行)
