跳到主要内容

StringBuilder

上一节,我们学习了 Java 的 String 类,并介绍了其常用方法。本小节我们来介绍字符串的另外一个类:StringBuilder,我们将会了解到 StringBuilderString差异StringBuilder使用场景,也会介绍与 StringBuilder 类对应的 StringBuffer 类,StringBuilder使用方法以及其常用方法是本小节的重点学习内容。

1. StringBuilder 概述

1.1 什么是 StringBuilder

String 相似,StringBuilder 也是一个与字符串相关的类,Java 官方文档给 StringBuilder 的定义是:可变的字符序列。

1.2 为什么需要 StringBuilder

在 Java 字符串的学习中,我们知道了字符串具有不可变性,当频繁操作字符串时候,会在常量池中产生很多无用的数据(回忆图示)。

StringBuilderString 不同,它具有可变性。相较 String 类不会产生大量无用数据,性能上会大大提高。

因此对于需要频繁操作字符串的场景,建议使用 Stringbuilder 类来代替 String 类。

2. StringBuffer 概述

2.1 定义

了解了 StringBuilder 类 ,StringBuffer 也是不得不提的一个类,Java 官方文档给出的定义是:线程安全的可变字符序列。

2.2 与前者的区别

StringBufferStringBuilder 的前身,在早期的 Java 版本中应用非常广泛,它是 StringBuilder 的线程安全版本(线程我们将在后面的小节中介绍),但实现线程安全的代价是执行效率的下降

你可以对比 StringBuilderStringBuffer 的接口文档,它们的接口基本上完全一致。为了提升我们代码的执行效率,在如今的实际开发中 StringBuffer 并不常用。因此本小节的重点在 StringBuilder 的学习。

3. StringBuilder 的常用方法

3.1 构造方法

StringBuilder 类提供了如下 4 个构造方法:

  1. StringBuilder() 构造一个空字符串生成器,初始容量为 16 个字符;
  2. StringBuilder(int catpacity) 构造一个空字符串生成器,初始容量由参数 capacity 指定;
  3. StringBuilder(CharSequence seq) 构造一个字符串生成器,该生成器包含与指定的 CharSequence 相同的字符。;
  4. StringBuilder(String str) 构造初始化为指定字符串内容的字符串生成器。

其中第 4 个构造方法最为常用,我们可以使用 StringBuilder 这样初始化一个内容为 hello 的字符串:

StringBuilder str = new StringBuilder("Hello");

3.2 成员方法

StringBuilder 类下面也提供了很多与 String 类相似的成员方法,以方便我们对字符串进行操作。下面我们将举例介绍一些常用的成员方法。

3.2.1 字符串连接

可以使用 StringBuilderStringBuilder append(String str) 方法来实现字符串的连接操作。

我们知道,String 的连接操作是通过 + 操作符完成连接的:

String str1 = "Hello";
String str2 = "World";
String str3 = str1 + " " + str2;

如下是通过 StringBuilder 实现的字符串连接示例: