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