1. 程式人生 > >java--String、StringBuffer、StringBuilder之間的區別:

java--String、StringBuffer、StringBuilder之間的區別:

在Java語言中,共有byte、short、int、long、float、double、boolean、char 8個基本資料型別,其中char型別表示單個字元。在實際的程式設計過程中,我們比較常用的是由多個字元組成的“字串”,由於沒有表示“字串”的基本資料型別,所以Java提供了一個被final修飾、不能被繼承的類String,從而為我們能夠使用字串型別提供了方便。隨著Java語言的不斷髮展,又衍生出了StringBuffer和StringBuilder兩個字串構建器。

對於String、StringBuffer、StringBuilder這三種類型,無論在求職過程中的面試還是以後的實際工作中,我們都要經常面對,所以掌握三者分別的內容、特點、用途、注意事項及三者之間的區別顯得尤為重要。

1. String

通過以上所述,我們已經大致知道String型別是一個被final關鍵字修飾、不能被繼承類,包含在java.lang包。關於String類的例項化,有以下兩種方法,一種是直接賦值法,這種方法最為常用;另一種是傳統方法,使用new關鍵字進行例項化,具體如下:

//1.直接賦值

String str = "Hello World !" ; // str是一個物件,那麼"Hello World !" 就應該儲存在堆記憶體中

//2.傳統方法(構造法)

String str = new String("Hello World !");//該方法符合傳統做法,使用關鍵字new進行物件例項化。

String類的具體用法請參照我的另一篇博文,其中對String類的常用方法進行了較為詳細地說明,有興趣的童鞋可以參考參考。

String 類的缺陷 :不能對String類建立的物件進行增、刪、改等操作;

                              String類不能被繼承。

String 類的特點:任何的字串常量都是String物件,而且String的常量一旦宣告不可改變,如果改變物件內容,改變的只是其引用的指向而已。

2. StringBuffer

StringBuffer 類是為了解決String 類的缺陷中不能對String 類建立的物件進行增、刪、改等操作而產生的。StringBuffer 類有很多和String 類一樣的方法,這些方法在功能上和String中的功能相同。

String類中使用“ + ”來進行字串連線,但是這個操作在StringBuffer類中需要更改為appen() 方法:

public synchronized StringBuffer append(各種資料型別 b)

StringBuffer類中字串連線操作的簡單舉例:

public class Test{
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer();
	    sb.append("Hello").append("World");
		fun(sb);
		System.out.println(sb);
		}
    public static void fun(StringBuffer temp) {
		temp.append("happy").append("everyday");
	}
}

   2.1 String 類和 StringBuffer 類的區別:

2.1.1 String的內容無法修改,而StringBuffer的內容可以修改。頻繁修改字串的情況建議使用StringBuffer 類;

2.1.2 StringBuffer 類的內部實現方式和String 類不同,StringBuffer 類在進行字串修改時不產生新的物件。在記憶體的使用上StringBuffer類優於String類;

2.1.3 StringBuffer物件的初始化與String物件的初始化不大相同。通常情況下采用構造方法對StringBuffer的物件進行初始化;

           2.1.4 StringBuffer是執行緒安全的,可用於多執行緒。

   2.2 String和StringBuffer類不能直接轉換。如果要想互相轉換,可以採用如下原則:
           2.2.1 String變為StringBuffer:利用StringBuffer的構造方法或append()方法;
           2.2.2 StringBuffer變為String:呼叫toString()方法。

   2.3 StringBuffer類中String類沒有的方法:

            2.3.1 字串反轉:

public synchronized StringBuffer reverse()

            2.3.2 刪除指定範圍的資料:

public synchronized StringBuffer delete(int start, int end)

2.3.3 插入資料

public synchronized StringBuffer insert(int offset, 各種資料型別 b)

3. StringBuilder

在JDK5.0 之後,Java語言有引入了StringBuilder 類,這個類是在StringBuffer類的基礎上產生的。StringBuilder類的效率較低,但允許採用多執行緒的方式進行新增或者刪除字元的操作。如果所有的字串在一個單執行緒中,則應該需要用StringBuilder類。StringBuilder 類和StringBuffer類的api完全相同。

4. String 、StringBuffer 、StringBuilder的區別:

4.1 操作效率方面:StringBuilder > StringBuffer > String;

4.2 執行緒安全方面:StringBuffer是執行緒安全的,可用於多執行緒;StringBuilder是非執行緒安全的,可用於單執行緒;

4.3 頻繁字串操作方面:StringBuilder和StringBuffer優於String;

4.4 String的內容不可修改,StringBuffer和StringBuilder的內容可以修改。這裡的修改指的是字串的內容或長度;

4.5 StringBuffer 採用同步處理,屬於執行緒安全操作;StringBuilder採用非同步處理,屬於執行緒不安全操作。

相關推薦

StringStringBufferStringBuilder之間區別 .RP

什麽 方式 tr1 abcd 為什麽 mes strong 速度 一點   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言而喻,

StringStringBufferStringBuilder之間區別

安全 .com 學習 ron img build tro ges 變量   大家在最初結束String字符串的時候,都會被教做認為String是不可變的字符串常量,是不可改變的常量。但是我們看下面的一個列子:   為什麽會發生這種情況呢?難道最開始我們學習的就是錯誤的?

自己(轉)StringStringBufferStringBuilder之間區別

理解 疑問 多線程 blog gpo string類 body 對象 就是   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言

StringStringBufferStringBuilder之間區別

這三個類之間的區別主要是在兩個方面,即 執行速度 和 執行緒安全 這兩方面。 1. 首先說執行速度,或者說是執行速度, 在這方面執行速度快慢為:StringBuilder > StringBuffer > String String最慢的原

StringStringBufferStringBuilder之間區別 以及String 直接賦值和new後賦值區別

   這裡是引用他人程式碼: 最近學習到StringBuffer,心中有好些疑問,搜尋了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字串處理中的位置不言而喻,那麼他們到底有什麼優缺點,到底什麼時候該用誰呢

StringStringBufferStringBuilder之間區別(轉)

ons 字符 總結 當前 命令 其它 有一個 system 機制 原文地址https://www.cnblogs.com/goody9807/p/6516374.html String 字符串常量StringBuffer 字符串變量(線程安全)StringBuilder

javaStringStringBufferStringBuilder區別(簡單介紹)

情況 string 建議 code serializa 就是 同步 安全性 之間 簡單介紹 java中用於處理字符串常用的有三個類: 1、java.lang.String 2、java.lang.StringBuffer 3、java.lang.StrungBuilder

JavaString StringBufferStringBuilder區別

String 類是不可改變的,所以你一旦建立了 String 物件,那它的值就無法改變了 StringBuffer 和 StringBuilder 類相同點: StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。 Str

JavaStringStringBufferStringBuilder區別

近期看到StringBuffer,便搜尋整理了一些關於String、StringBuffer和StringBuilder的東西,僅供分享參考。 1、String String:字串常量,字串長度不可變的。Java中String是immutable(不可變)的。先看原始碼: public

圖解JavaStringStringBufferStringBuilder區別

圖解Java中String、StringBuffer和StringBuilder的區別 參考部落格:https://blog.csdn.net/weixin_41101173/article/details/79677982 一、Java中的 String 類——String 是字串常量 1、字

JAVAStringStringBufferStringBuilder區別

1、String不可以改變,StringBuffer和StringBuilder都是可以改變的 2、StringBuffer是同步的,資料安全,但是效率低。StringBuilder不是同步的,效率高

JavaStringStringBufferStringBuilder區別與使用。

1 String String:字串常量,字串長度不可變。Java中String是immutable(不可變)的。 String類的包含如下定義: /** The value is used for character storage. */ privatefinalchar value[];  

StringStringBufferStringBuilder區別

字符 同步 內容 array 模式 改變 nat test 方式 1 String String:字符串常量,字符串長度不可變。Java中String是immutable(不可變)的。 String類的包含如下定義: [java] view plaincopy

StringStringBufferStringBuilder區別

string 單線程 public pan color 緩沖 ron 很多 bsp String 字符串常量StringBuffer 字符串變量(線程安全)StringBuilder 字符串變量(非線程安全) 首先三者主要輸在運行速度和線程安全這兩位方面。

StringStringBufferStringBuilder區別及應用場景

1 String、StringBuffer與StringBuilder區別 (1)區別 String內容不可變,StringBuffer和StringBuilder內容可變; StringBuilder非執行緒安全(單執行緒使用),String與StringBuffer執行緒安全(多執

StringStringBufferStringBuilder區別(理論)

String、StringBuffer和StringBuilder的區別: 1.String不可變字串,賦值都會新建物件,除非字串池中已經存在,修改的不是值而是引用 2.StringBuffer和StringBulider字串 在原有的基礎上進行修改,當前操作的都是字串 3.S

Java基礎】StringStringBufferStringBuilder之間區別

對於這三個類,先總體來理解一下: 對String,你建立了一個String,你能通過set方法改變它的長度length嗎?顯然是不行的! 但 StringBuffer 可以! String 字串常量 StringBuffer 字串變數(執行緒安全) StringBu

經典問題--StringStringBufferStringBuilder區別

String、StringBuffer和StringBuilder的區別 這個問題主要主要從兩個方面去回答 - **速度 - **執行緒安全 String String字串不斷賦值的過程,JVM處理的處理是:不斷的建立物件和回收物件,所以速度是

優美的講解StringStringBufferStringBuilder區別跟執行效率

在大部分情況下 StringBuffer > StringStringBufferJava.lang.StringBuffer執行緒安全的可變字元序列。一個類似於 String 的字串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字元序列,但通過某些方法呼叫可以改變該序列的長度和內容。可將字串

JAVA學習|StringStringBufferStringBuilder區別與聯絡

String,StringBuffer,StringBuilder的區別與聯絡 String,StringBuffer,StringBuilder的區別這個問題幾乎是面試必問的題 ,最近學習的時候恰好遇到,就順便總結一下。 本文參考了以下文章: String StringBuild