StringBuffer 与 StringBuilder:StringBuffer 和 StringBuilder 的区别

已发表: 2020-10-20

在 Java 中编程时,字符串是最常用的类之一。 String 是一个对象,当您想要表示一个字符序列时使用它。 它们有几个属性,其中之一是不变性,这意味着它们不能被修改。 Java 中引入了 String Buffers 和 String Builders 来解决这个问题。 使用这些类,可以一遍又一遍地进行修改。

在本文中,我们将介绍这两个类并讨论它们之间的区别。 在进入课程之前,我们将熟悉 Java 中字符串的概念。

目录

Java中的字符串

字符串在 Java 中用于存储一系列字符值。 它们在 Java 编程语言中被视为对象。 我们有多种选择来创建和操作字符串。

创建字符串的基本语法如下:

字符串句子 = “你好,世界!”;

字符串有一些属性,其中之一是它们是不可变的,这意味着它们不能被修改。 但是如果你想要一个可以修改的字符串怎么办。 为此,使用了称为 String Buffers 和 String Builders 的 Java 修改。 现在我们已经了解了字符串是什么,我们将继续进行比较。

必读: Java 项目理念和主题

从世界顶级大学在线学习软件课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

字符串缓冲区

String Buffer 是 Java 中使用的一个类修改,通过赋予可变性等特性来为字符串添加更多功能。 我们可以使用 append()、insert()、reverse()、replace() 等方法来修改字符串。 StringBuffer 有四个定义的构造函数; 它们如下:

  • StringBuffer():这将创建一个没有特征的空字符串缓冲区,容量为 16 个字符。
  • StringBuffer(CharSequence chars ):它创建一个 StringBuffer,其中包含与指定 CharSequence 相同的字符。
  • StringBuffer(int size):构造一个没有指定初始容量的字符的StringBuffer。
  • StringBuffer(String str ):它创建一个带有初始指定字符串的 StringBuffer 对象。

让我们讨论一些我们可以在 StringBuffer 中使用来修改特定字符串的不同方法:

  • Length() 和 capacity(): StringBuffer 的当前长度可以通过 length() 方法找到,而要找到总容量,我们使用 capacity() 方法。
  • append(): append() 方法用于将字符串与其他或相似的数据类型连接起来。 我们可以使用这种方法将字符串、数字和对象附加到字符串中。
  • Insert():该方法用于将一个字符串插入到另一个字符串中。
  • charAt():该方法用于查找StringBuffer中单个字符的值。

我们可以看到如何根据需要使用 StringBuffer 来修改字符串。 那么,当我们可以使用 StringBuffer 获得这样的功能时,为什么还要使用 StringBuilder 呢?

学习:面向初学者的 20 大热门 Android 项目创意和主题

字符串生成器

Java 中的 StringBuilder 是一系列可变字符。 StringBuilder 提供了一个替代类来生成可以修改的字符串,因为我们知道字符串是不可变的。 它与StringBuffer非常相似,但两者的不同之处在于同步。 StringBuilder 不同步,这反过来意味着它不是线程安全的。 StringBuilder 也有四个定义的构造函数; 它们如下:

  • StringBuilder():它创建一个空的 StringBuilder,其中包含 16 个字符的房间。
  • StringBuilder(int size):创建一个指定大小的空字符串。
  • StringBuilder(CharSequence seq):它创建一个包含与指定 CharSequence 相同的字符的 StringBuilder。
  • StringBuilder(String str ):使用最初指定的字符串 str 创建一个 String Builder 对象。

让我们讨论一些可以在 StringBuilders 上使用的方法:

  • append():当你想在字符串上附加一些东西时使用这个方法,无论它是一个字符串还是一个数字或一个对象。
  • Replace():如果要从另一组字符中替换一个字符串,可以使用replace()方法。
  • Substring():如果要获取字符串的一部分,可以使用 substring() 方法获取。

所以我们可以看到 StringBuffer 和 StringBuilder 似乎是一样的。 尽管它们具有相似的功能,但它们却大不相同,在许多情况下,使用其中一种而不是另一种可能会更好。

两个班级的区别

同步

默认情况下,StringBuffer 是同步的,而 StringBuilder 没有任何同步。 如果字符串必须由多个线程访问并且没有应用外部同步,则必须使用 StringBuffer 而不是 StringBuilder。

线程安全

StringBuilder 不是线程安全的类,而 StringBuffer 有这个特点; 这是因为 StringBuffer 是同步的。

速度

由于以上两个特点,StringBuffer 比 StringBuilder 慢。 所以如果你想有更快的性能并且不需要以上的特性,StringBuilder的速度和效率让它成为一个更好的选择。

StringBuilder是在 Java 1.5 中通过分析 StringBuffer 的缺点引入的,并且有足够的更改使其可以在某些情况下使用,前者可能会影响性能。

性能和内存消耗

从以上几点我们可以了解到,与 StringBuffer 相比,StringBuilder 在性能方面更快。 两者之间的内存消耗也不同,其中 StringBuffer 比后者消耗更多的内存。

另请阅读: 130 多个 Java 面试问题和答案

包起来

尽管 StringBuilder 被归类为 StringBuffer 等字符串类的替代品,但在使用方面它更加灵活。

因此,如您所见,如果要修改默认情况下是不可变字符集的字符串,则必须使用 StringBuffer 或 StringBuilder 类,因为它们提供了更改字符串的能力。 这两个类在表面上是相似的,如您所见,它们使用相同的方法和相似的构造函数。

两者之间的区别归结为同步和线程。 如果您在不关心线程安全的环境中工作,则可以使用 StringBuilder,因为它会更快更高效,但是如果您需要线程安全,则应该使用 StringBuffer,因为它是同步的和线程的安全的。

如果您有兴趣了解有关 Java、全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的软件开发执行 PG 计划 - 网络安全专业化,专为工作专业人士设计,提供 500 多个小时的严格培训, 9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

踏上梦想的工作

申请计算机科学理学硕士