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数据访问层一般都是单线程执行)
