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