一、String
由 char[]
数组构成,使用了 final
修饰,String
的值是不可变的,这就导致每次对String
的操作都会生成新的String
对象,然后把指针指向新的引用对象,不仅效率低下,而且浪费大量优先的内存空间。
二、StringBuffer
StringBuffer
是可变并且线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer
对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
三、StringBuilder
可变但线程不安全。
StringBuilder
类在 Java 5 中被提出,它和 StringBuffer
之间的最大不同在于 StringBuilder
的方法不是线程安全的(不能同步访问)。
由于 StringBuilder
相较于 StringBuffer
有速度优势,所以多数情况下建议使用 StringBuilder
类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer
类。
四、比较
- 操作少量字符数据用
String
; - 单线程操作大量数据用
StringBuilder
; - 多线程操作大量数据用
StringBuffer
。
String
、StringBuffer
、StringBuffer
都是final
类,不允许被继承;String
声明的对象进行内容修改会产生一个新的对象,而StringBuffer
、StringBuilder
则是对自身进行修改,不会产生新的对象;- 运行速度:
StringBuilder
>StringBuffer
>String
- 线程安全:
StringBuilder
<StringBuffer
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/104930.html