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的对象

posted @ 2022-03-20 16:30  小甘同学1997  阅读(32)  评论(0)    收藏  举报