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参数解析和封装。

浙公网安备 33010602011771号