String、StringBuffer 和 StringBuilder的关系及比较

发布于:2022-12-30 ⋅ 阅读:(649) ⋅ 点赞:(0)

1. StringBuffer 类

1.1 基本介绍

  1. java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删
  2. 其中很多方法与String相同,但StringBuffer 是可变长度的
  3. StringBuffer 是一个容器

1.2 String VS StringBuffer

  1. String 保存的是字符串常量,里面的值不能更改,每次String的更新实际上就是更改地址,效率较低
  2. StringBuffer 保存的是字符串变量,里面的值可以更改,每次StringBuffer 的更新不用每次更新地址,效率较高

1.3 String 和 StringBuffer 相互转换

String str = "hello tom";
//方式 1 使用构造器 
//注意: 返回的才是 StringBuffer 对象,对 str 本身没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式 2 使用的是 append 方法 
StringBuffer stringBuffer1 = new StringBuffer(); 
stringBuffer1 = stringBuffer1.append(str);
//看看 StringBuffer ->String
StringBuffer stringBuffer3 = new StringBuffer("小驴啵啵");
//方式 1 使用 StringBuffer 提供的 toString 方法 
String s = stringBuffer3.toString(); 
//方式 2: 使用构造器来搞定 
String s1 = new String(stringBuffer3);

1.4 StringBuffer常见方法

StringBuffer s = new StringBuffer("hello");
s.append("小驴啵啵");//"hello小驴啵啵"
s.insert(5,",");//"hello,小驴啵啵"
s.append("最棒").append(100);//"hello,小驴啵啵最棒100"

删除索引为>=start && <end 处的字符

s.delete(12, 15);//"hello,小驴啵啵最棒"

s.replace(8, 10, "晨晨");// "hello,小驴晨晨最棒"

查找指定的子串在字符串第一次出现的索引,如果找不到返回-1

int indexOf = s.indexOf("啵啵");

在索引为 10 的位置插入 “真”,原来索引为 10的内容自动后移

长度

System.out.println(s.length());//13

2. StringBuilder 类

2.1 基本介绍

  1. 一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder 不是线程安全)。该类被设计用作StringBuilder 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。
  2. 在 StringBuilder 上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。

2.2 String、StringBuffer 和 StringBuilder 的比较

  1. StringBuffer 和 StringBuilder 非常类似,均代表可变的字符序列,而且方法也一样
  2. String:不可变字符序列,效率低,但是复用率高。
  3. StringBuffer:可变字符序列,效率较高,线程安全。
  4. StringBuilder :可变字符序列,效率较高,线程不安全。

2.3 String、StringBuffer 和 StringBuilder 的选择

  1. 如果字符串存在大量的修改操作,一般使用StringBuffer 或 StringBuilder
  2. 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuffer
  3. 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
  4. 如果字符串很少修改,被多个对象引用,使用String,比如配置信息等

StringBuilder的使用方法和StringBuffer一样,这里就不再介绍。

本文含有隐藏内容,请 开通VIP 后查看