String,StringBuffer與StringBuilder的區別
一、Java String 類——String字串常量
在 Java 中字串屬於物件,Java 提供了 String 類來建立和操作字串。
String的值是不可變的,這就導致每次對String的操作都會生成新的String物件,這樣不僅效率低下,而且大量浪費有限的記憶體空間。我們來看一下這張對String操作時記憶體變化的圖:
我們可以看到,初始String值為“hello”,然後在這個字串後面加上新的字串“world”,這個過程是需要重新在棧堆記憶體中開闢記憶體空間的,最終得到了“hello world”字串也相應的需要開闢記憶體空間,這樣短短的兩個字串,卻需要開闢三次記憶體空間,不得不說這是對記憶體空間的極大浪費。為了應對經常性的字串相關的操作,谷歌引入了兩個新的類——StringBuffer類和StringBuild類來對此種變化字串進行處理。
二、Java StringBuffer 和 StringBuilder 類——StringBuffer字串變數、StringBuilder字串變數
當對字串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的物件能夠被多次的修改,並且不產生新的未使用物件。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是執行緒安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程式要求執行緒安全的情況下,則必須使用 StringBuffer 類。
三者的繼承結構
三者的區別:
(1)字元修改上的區別(主要,見上面分析)
(2)初始化上的區別,String可以賦空值,StringBuffer不可以賦值為空,會報錯
①String
String s = null;
String s = “abc”;
②StringBuffer
StringBuffer s = null; //結果警告:Null pointer access: The variable result can only be null at this location
StringBuffer s = new StringBuffer();//StringBuffer物件是一個空的物件(可為空,但不可直接賦值)
StringBuffer s = new StringBuffer(“abc”);//建立帶有內容的StringBuffer物件,物件的內容就是字串”
小結:
(1)如果要操作少量的資料用 String;
(2)多執行緒操作字串緩衝區下操作大量資料 StringBuffer;
(3)單執行緒操作字串緩衝區下操作大量資料 StringBuilder。
相關文章
- String、StringBuffer、StringBuilder區別?UI
- String,StringBuffer,StringBuilder區別UI
- String,StringBuilder,StringBuffer的區別UI
- String、StringBuffer、StringBuilder的區別UI
- String、StringBuilder、StringBuffer的區別UI
- Android- String、StringBuffer、StringBuilder區別AndroidUI
- 『Java 語法基礎』String、StringBuffer 與 StringBuilder 的區別JavaUI
- 從原始碼看String,StringBuffer,StringBuilder的區別原始碼UI
- 面試必知:String、StringBuilder、StringBuffer的區別面試UI
- String StringBuffer StringBuilder的區別(前端面試必備)UI前端面試
- Java中的String,StringBuilder,StringBuffer三者的區別JavaUI
- StringBuffer和StringBuilder的區別UI
- StringBuilder和StringBuffer的區別UI
- String、StringBuffer、StringBuilder的理解UI
- stringbuilder和stringbuffer區別UI
- String、StringBuilder和StringBufferUI
- String、StringBuffer、StringBuilder剖析UI
- String、StringBuffer和StringBuilder類的UI
- 【Java】String、StringBuilder和StringBufferJavaUI
- Java 之String、StringBuffer 和 StringBuilder 三者區別介紹JavaUI
- StringBuffer 和 StringBuilder 的 3 個區別UI
- String StringBuild StringBuffer的區別UI
- 認識Java中String與StringBuffer以及StringBuilderJavaUI
- String和StringBuilder的區別UI
- StringBuilder和String 的區別?UI
- 老生常談 String、StringBuilder、StringBufferUI
- C# string、stringBuffer和stringBuilderC#UI
- java複習之 String,StringBuffer,StringBuilderJavaUI
- 67. StringBuilder和String 的區別?UI
- [java基礎]StringBuilder和StringBuffer的3個區別JavaUI
- 你必須搞清楚的String,StringBuilder,StringBufferUI
- Java容器深入淺出之String、StringBuffer、StringBuilderJavaUI
- Java中String,StringBuffer,StringBuilder基礎知識JavaUI
- 【扯皮系列】一篇與眾不同的 String、StringBuilder 和 StringBuffer 詳解UI
- 面試常備,字串三劍客 String、StringBuffer、StringBuilder面試字串UI
- StringBuffer和StringBuilderUI
- JAVA面試題 StringBuffer和StringBuilder的區別,從原始碼角度分析?Java面試題UI原始碼
- [轉載] 整理下java中stringBuilder和stringBuffer兩個類的區別JavaUI