一、简介?
- 定义
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
本文详细介绍了Java中String、StringBuffer和StringBuilder的区别。String是字符串常量,不可变;StringBuffer和StringBuilder是线程安全和非线程安全的字符串变量,适合大量操作。在单线程环境下,StringBuilder效率更高;多线程环境下推荐使用StringBuffer。选择使用时应根据实际场景考虑性能和线程安全需求。

被折叠的 条评论
为什么被折叠?



