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 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

踏上夢想的工作

申請計算機科學理學碩士