String、StringBuffer 和 StringBuilder 的区别
1.String:
1.1、字符串常量,字符串长度不可变。
1.2、Java中String 是不可变的。用于存放字符的数组被声明为final的,因此只能赋值一次,不可再更改。
1.3、底层是使用char[]存储
2.StringBuffer:
2.1、字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
2.2、底层使用char[]存储
2.2、StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
- append 方法始终将这些字符添加到缓冲区的末端;
- insert 方法则在指定的点添加字符。
3.StringBuilder:
字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
4.使用策略
4.1、基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。
4.2、不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类
4.3、为了获得更好的性能,在构造 StringBuffer 或 StringBuilder 时应尽可能指定它们的容量。当然,如果你操作的字符串长度(length)不超过 16 个字符就不用了,当不指定容量(capacity)时默认构造一个容量为16的对象

浙公网安备 33010602011771号