刷 Java 面试题的时候,遇到了这样一个问题
“ Java 中操作字符串都有哪些类?它们之间有什么区别?”
突然一下子说不出个所以然来,菜是原罪,还是老老实实刷基础做总结吧。
概述
操作字符串的类有 String
, StringBuffer
, StringBulider
-
String
声明的对象是字符串常量 -
StringBuffer
声明的对象是可变长字符序列,是变量 -
StringBuilder
声明的对象也是可变长字符序列,是变量
String
为什么说 String
声明的是字符常量呢?
String
类是被final
修饰的类,不可以被继承,也不会被其他类改变
String
每次操作字符串都会生成新的字符串对象- 每次生成新的对象会影响系统内存,过多的无引用对象会引发 JVM 进行垃圾回收工作,这样效率就更低了
- 所以对于字符串内容改动频率高的情况,尽可能不要使用
String
StringBuffer
StringBuffer
是线程安全的- 任何字符串的操作都是在原有字符串对象上执行,不生成新的对象
StringBuffer
是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类- 常使用 append\insert 操作
StringBuilder
StringBuilder
是非线程安全的- 任何字符串的操作都是在原有字符串对象上执行,不生成新的对象
StringBuilder
是在 5.0 新增的,被设计用作StringBuffer
的一个简易替换,两者方法基本相同
最后
- 从速度上而言
StringBuilder
>StringBuffer
>String
StringBuilder
适用于单线程情况下操作大量字符串StringBuffer
适用于多线程情况下操作大量字符串String
适用于操作少量字符串
用来笔记,分享。
以上若有不对之处欢迎留言指正,共同进步…
Logging
- 2019/11/12 init