Java String, StringBuffer, StringBuilder区别 个人简单总结
Java String, StringBuffer, StringBuilder区别
String类
String类的特点
String类是不可改变的 Immutable的典型实现.
线程安全.
- String类的优点
- 如果有大量相同字符串存到不同的变量操作需求使用 String类能节省内存提高性能.
例如 以下两个变量内存指向是同一个, 也就是说只开辟了一个内存地址.
String A = "Hello":
String B = "Hello";
- 因有不可改变的特点创建的时候hash被缓存了下来, 不需要重复计算, 使得很适合做 Map的键性能优于其它类型.
- String类的缺点
- 拼接字符串时会产生很多字符串对象导致性能下降.
Tip: 简单拼接 例如 String s = “A” + “B” + “C” 像这样的 JVM一般自动通过 StringBuilder append处理而不产生多于中间对象, 但不建议这样用.
StringBuffer类
StringBuffer类的特点
- 线程安全.
- 可修改的字符串对象, 减少创建和自动垃圾回收成本
- 默认大小是16个字符, 然后按需自动扩容
线程安全是有性能代价的, 但是大多数情况字符串拼接不需要线程安全的, 这时候 JDK1.5发布了 StringBuilder
StringBuilder类
StringBuilder类的特点
- 线程不安全.
- 可修改的字符串对象, 减少创建和自动垃圾回收成本
- 默认大小是16个字符, 然后按需自动扩容
总结
- 字符串拼接和删除等操作不多时优先使用String.
- 字符串拼接和删除多且必须线程安全时使用 StringBuffer.
- 字符串拼接和删除多, 可以线程不安全就使用 StringBuilder.
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!