本篇文章帶給大家的內容是關於 java中String和StringBuffer有何不同? (區別對比),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
String和StringBuffer都是java關於字元操作的類別
尤其String,常常看到類似這樣的賦值程式碼String str = "Hello World",看起來好像int一樣以為是java的基本資料型別,其實不是,String是一個類,是一個特殊的類,可以像基本資料型別一樣直接賦值。
java中有三個類別可以對字元進行操作:
(1)Character 是進行單一字元操作的類別。
(2)String 對一串字元進行操作的不可變類別。
(3)StringBuffer 也是對一串字元進行操作,但是可變類別。
StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值,其實是兩個對象。
String是對象,不是原始型別;為不可變對象,一旦被創建,就不能修改其值。
對於已經存在的String物件的修改,實際上是重新建立一個新的對象,然後把新的值存進去。
String是final類,不能被繼承。
StringBuffer是一個可變對象,當對它修改的時候,不會像String那樣重新建立對象,它只能透過建構函式來建立。物件被創立後,會分配記憶體空間,並初始保存一個null。向StringBuffer賦值的時候,可以透過它的append方法:obj.append("hello");
字串連線作業中StringBuffer的效率比String高。
如果程式中需要對字串進行頻繁的修改連接操作的話,使用StringBuffer效能會更高。
在String類別中,沒有用來改變已有字串中的某個字元的方法,由於不能改變一個java字串中的某個單獨字符,所以在JDK文檔中稱String類別的物件是不可改變的。
然而,不可變的字串有一個很大的優點:編譯器可以把字串設定為共享的。
StringBuffer是線程安全的,在多執行緒程式中也可以很方便的進行使用,但是程式執行效率相對來說就要稍微慢一些。
StringBuffer類別中的方法偏重於字串的變化,例如追加、插入和刪除等,這個也是StringBuffer和String類別的主要區別。
String str = new String("Hello World");str = "hello world";此字串連接的處理過程:
(1)建立一個StringBuffer;
(2)呼叫append()方法;
(3)最後StringBuffer呼叫toString()給String重新賦值
(4)這樣看來,String的連線操作,比StringBuffer多了一些操作,效率上就會打折扣。
(5)而且,由於String是不可變對象,每次重新賦值都會重新創建新的對象,那麼原來的對象就沒用了,就要被垃圾回收,也影響性能。
StringBuffer類別屬於一種輔助類,可預先分配指定長度的記憶體區塊建立一個字串緩衝區。這樣使用StringBuffer類別的append方法追加字符,比String使用「 」操作符添加字符到一個已經存在的字串後面有效率的多。
使用「 」運算子每一次將字元新增到一個字串中去時,字串物件都需要尋找一個新的記憶體空間來容納更大的字串,這無疑是一個非常消耗時間的操作。添加多個字元就意味著要一次又一次的對字串重新分配記憶體。使用StringBuffer就避免了這個問題。
以上是java中String和StringBuffer有何差別? (區別對比)的詳細內容。更多資訊請關注PHP中文網其他相關文章!