Java 中 String、StringBuffer 和 StringBuilder 的区别

2025年8月12日 | 阅读 4 分钟

字符串是字符序列的表示。在Java编程中,开发人员最常使用的类之一是字符串。然而,由于字符串是不可变的,Java创建了StringBuilder和StringBuffer实用类来简化字符串操作。

String

字符串是计算机科学中的一种基本数据类型,用于表示文本,而不是像整数或浮点数这样的数值数据类型。它由一个“字符串”或一系列字符组成,这些字符可以是字母、数字、符号或空格。

在大多数编程语言中,引号用于区分字符串与其他数据类型,包括数字或变量名。字符串是不可变的。

要阅读更多Java String

示例

编译并运行

输出

Tutorials   

StringBuilder

在Java中,StringBuilder类是java.lang包的一部分,它提供了一个可变的字符序列。对于频繁的字符串操作,StringBuilder更快,占用的内存更少,因为它允许原地更新,不像String那样是不可变的。

要阅读更多StringBuilder in Java

示例

编译并运行

输出

TpointTech  Hi Java 8 

StringBuffer

Java StringBuffer类中的字符是可以更改的。我们可以使用StringBuffer轻松地更改String的内容。有许多有用的函数可用于操作字符串。

在多线程环境中,推荐使用StringBuffer操作,因为它们本质上是同步的。如果不需要同步,可以使用替代的StringBuffer API。

阅读更多:StringBuffer in Java

示例

编译并运行

输出

StringBuffer Hi Java 8  

String Vs. StringBuffer Vs. StringBuilder

参数StringStringBuilderStringBuffer
引言引入于JDK 1.0引入于JDK 1.5引入于JDK 1.0
线程安全线程安全非线程安全线程安全
可变性不可变可变可变
性能对于许多连接操作,它可能更慢。高(无 - 同步)低(由于同步)
内存效率效率更高高效效率较低
用途当我们需要不可变性时使用它。当不需要线程安全时使用它。当需要线程安全时使用它。

String、StringBuilder和StringBuffer选择题

1. ___________ 类在单线程环境中需要频繁修改时提供更好的性能?

  1. String
  2. StringBuffer
  3. StringBuilder
  4. StringTokenizer
 

答案:C

解释: StringBuilder 比 StringBuffer 快,因为它没有同步开销。它非常适合单线程场景,在这些场景中性能至关重要且字符串内容频繁更改。


2. 当我们需要可变字符串并在多线程环境中工作时,我们会使用哪个类?

  1. String
  2. StringBuffer
  3. StringBuilder
  4. StringTokenizer
 

答案: B

解释: StringBuffer 是Java中一个可变且线程安全的类。它是同步的,这意味着一次只有一个线程可以访问它,因此在多线程环境中可以安全使用。


3. Java 中以下哪个是不可变的?

  1. String
  2. StringBuffer
  3. StringBuilder
  4. 以上都不是
 

答案: A

解释: 在Java中,String对象是不可变的,这意味着一旦创建,它们的值就无法更改。任何修改字符串的操作实际上都会创建一个新的String对象。相比之下,StringBuffer和StringBuilder都是可变的,允许在不创建新对象的情况下更改字符串内容。


4. 以下关于StringBuilder的说法哪个不正确?

  1. 它是可变的。
  2. 它是线程安全的。
  3. 它在单线程环境中比StringBuffer提供更好的性能。
  4. 它是在Java 5.0中引入的。
 

答案: B

解释: StringBuilder不是同步的,因此不是线程安全的,这使其在单线程环境中比StringBuffer快。它确实是在Java 5中引入的,并且是可变的。


5. 以下代码片段的输出是什么?

  1. Hello
  2. Hello World
  3. 世界
  4. 编译错误
 

答案: A

解释: concat()方法返回一个新字符串,但由于结果没有赋给任何变量,原始字符串s保持不变。因此,它会打印Hello。