一、简介?
- 定义
String:字符串常量
StringBuffer:字符串变量
StringBuilder:字符串变量 - 三者共同之处: 都是 final类, 不允许被继承 ;
- 不同之处在于: 运行速度和线程安全这两方面来开展 ;
1、运行速度快慢为:StringBuilder > StringBuffer > String .
2、线程安全: StringBuffer , StringBuffer中很多方法可以带有synchronized关键字.
二、区别
1.- String
- 在Java中,字符串属于对象,底层是一个final byte[],因此String对象中内容不可更改
- 当用String操作字符串时,实际上是不断地创建新的对象,原来的对象就会变成垃圾被GC回收,效率比较低
- 常用方法有:
方法 | 描述 |
---|---|
s.substring() | 截取字符 |
2.- StringBuffer
StringBuffer是线程安全, StringBuffer中很多方法可以带有synchronized关键字 , 可以不需要额外的同步用于多线程中。
3.- StringBuilder
- 是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了
- 但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作
三、小结
String: 适用于少量的字符串操作的情况
StringBuffer: 适用多线程下在字符缓冲区进行大量操作的情况
StringBuilder: 适用于单线程下在字符缓冲区进行大量操作的情况
所以如果要进行的操作是多线程的,使用StringBuffer,但是在单线程的情况下,使用速度比较快的StringBuilder