文章目录
一、参考表
StringBuffer | StringBuilder | String | |
---|---|---|---|
线程是否安全 | 线程安全,多线程并发 | 线程不安全,单个线程访问 | String是不可变类,是线程安全的 |
效率 | 相对低 | 相对高 | 执行拼接等,效率低,大量浪费有限的内存空间 |
是否可变 | 可变字符序列 | 可变字符序列 | 不可变字符串 |
出现版本 | JDK1.0 | JDK1.5 | JDK1.0 |
注:StringBuilder中的api使用与StringBuffer一致
二、String, StringBuilder, StringBuffer的区别
(1)StringBuilder与StringBuffer的区别
二者相比较StringBuffer更安全, 但不能说StringBuffer比StringBuilder更好
是因为StringBuffer的安全是建立在牺牲效率和耗费资源的角度上
(2)三者的区别
-
可修改性 :
String的内容是不可修改的, 而StringBuffer和StringBuilder可以通过一系列api的方法对内容进行增删改查 -
三者的效率比较 :
StringBuilder > StringBuffer > String -
从安全性和操作数据量去对比 :
如果操作的数据比较小优先使用String类
如果是在单线程环境下操作大量数据 ,优先使用StringBuilder类
如果是在多线程环境下操作大量数据 , 优先使用StringBuffer类 -
二者在调用toString()方法时 :
StringBuffer使用缓存区, 而StringBuilder没有使用缓存区
所以在没有数据修改的情况下, 多次调用StringBuffer的toString()获取的字符串,是底层共享的字符数组
而StringBuilder不是共享底层数组的每次都生成了新的字符数组
(3)StringBuilder和String相互转换
-
StringBuilder – string
public string tostring():通过tostring()就可以实现把stringBuilder转成String -
string – StringBuilder
stringBuilder(String str):通过构造方法(new stringBuilder( str ) ),就可以实现把string转成stringBuilder