StringBuffer 和StringBuilder的区别
相同点
都是字符串的缓冲区,都是字符串的生成器,都是可变的字符序列。
不同点
1.出现版本不同
StringBuffer 在jdk1.0出现的
StringBuilder在jdk1.5出现的
2.线程安全线不同
StringBuffer是线程安全的,在多线程环境下仍然保证数据安全。
StringBuilder是线程不安全的,在多线程环境下无法保证数据安全。
3.效率的不同
StringBuffer效率低
StringBuilder效率高
String和StringBuilder的联系
String是不可修改的,底层是final数组
StringBuilder是可以修改的,可变长度,底层是普通数组
String涉及变量拼接,在堆中转换成StringBuilder实现,StringBuilder调用tuString方法返回String类型对象
这样做内存中会创建更多的对象,而且转换过程也比较耗时
StringBuilder使用append拼接字符串就不存在以上问题
String和StringBuilder拼接字符串的区别
使用string类型拼接字符串,时间和空间上都非常浪费
1.创建一个stringbuilder的存储空间,大小为第一个字符串的长度+16
2.将第一个字符串添加到缓冲区
3.将第二个字符串添加到缓冲区
4.将缓冲区对象转成字符串对象(创建一个新的字符串对象)
5.返回该字符串对象
使用stringbuilder拼接字符串时间和空间上都非常节省,无论循环多少次都只创建两个对象
1.创建一个新的stringbuilder的存储空间
2.在stringbuilder的基础上进行添加,不创建新的字符串
3.循环完成后将stringbuilder转换成string