刷 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>StringStringBuilder适用于单线程情况下操作大量字符串StringBuffer适用于多线程情况下操作大量字符串String适用于操作少量字符串
用来笔记,分享。
以上若有不对之处欢迎留言指正,共同进步…
Logging
- 2019/11/12 init