String、StringBuilder、StringBuffer的区别

String, StringBuilder, StringBuffer 都是Java中处理字符串的类。区别如下

1. 不可变性

1.1 String

  • String内部的字符数组使用final修饰,为不可变的字符串类,
  • 每当对String对象进行改变时,都会创建一个新的String对象,旧的String对象会被JVM回收,容易触发gc,引起系统内存抖动。

1.2 StringBuilder 和 StringBuffer

StringBuilder 和 StringBuffer 是可变的,它们都允许修改字符串,而不会创建新的对象。

2. 线程安全

2.1 String

因为String是不可变的,所以是线程安全的

2.2 StringBuffer(线程安全)

StringBuffer中的方法均使用synchronized 关键字修饰,线程安全的‘

2.3 StringBuilder 不线程安全

3 性能

  • 对于复杂的字符串操作(多次的拼接,插入,删除),StringBuilder 和 StringBuffer效率高于String,因为它们可变的,不需要创建新的对象。

4 使用场景

4.1 String

  • 字符串不经常变化的场景中可以使用String 类,
  • 例如常量的声明、少量的变量运算。

4.2 StringBuilder

  • 在频繁进行字符串运算(例如拼接 + 替换 + 删除),
  • 且单线程的环境中,可以考虑使用,如SQL语句的拼装,JSON封装等。

4.3 StringBuffer

  • 在频繁进行字符串运算(例如拼接 + 替换 + 删除)并且运行在多线程环境中,可考虑使用StringBuffer
  • 例如XML解析、HTTP参数解析和封装。
posted @ 2025-04-28 18:59  kuki'  阅读(20)  评论(0)    收藏  举报