普通String字符串的拼接,不能改变字符串,而是重新分配内存地址存入了改变后新的字符串,而这样如果是在循环中,每改变一次字符串都要重新分配一次内存地址,无疑浪费了更多内存,效率变低。
StringBuilder
用StringBulider进行拼接,不会重新分配地址,它是一个可变对象,可以预先分配缓冲区,所以能有效提高字符串拼接效率
如下,创建StringBulider对象,用append方法拼接
public class demo07 {
public static void main(String[] args) {
StringBuilder sb=new StringBuilder(1024);
for(int i=0;i<1000;i++) {
sb.append(',');
sb.append(i);
}
String s=sb.toString();
System.out.println(s);;
}
}
StringBuffer
这是JAVA早期的进行字符串拼接的线程安全的版本,它通过加了一个锁(synchronized),线程更安全,但是这样就使得性能变差,现在还是更多使用的是StringBulider。
StringBuffer sb1=new StringBuffer(1024);
for(int i=0;i<1000;i++) {
sb.append(',');
sb.append(i);
}
String s1=sb.toString();
System.out.println(s1);
两者区别
- 都是专用与字符串拼接的类,两者都可改变字符串
- 都继承自AbstractStringBuilder类
- 都实现了同样两个接口
- StringBuffer加锁,比StringBulider的线程更安全
- StringBulider比StringBuffer的效率高,性能更好