首頁  >  文章  >  Java  >  java中String和StringBuffer有何差別? (區別對比)

java中String和StringBuffer有何差別? (區別對比)

不言
不言原創
2018-09-18 17:19:438190瀏覽

本篇文章帶給大家的內容是關於 java中String和StringBuffer有何不同? (區別對比),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

前言

  1. String和StringBuffer都是java關於字元操作的類別

  2. 尤其String,常常看到類似這樣的賦值程式碼String str = "Hello World",看起來好像int一樣以為是java的基本資料型別,其實不是,String是一個類,是一個特殊的類,可以像基本資料型別一樣直接賦值。

  3. java中有三個類別可以對字元進行操作:

(1)Character 是進行單一字元操作的類別。
(2)String 對一串字元進行操作的不可變類別。
(3)StringBuffer 也是對一串字元進行操作,但是可變類別。

Java中String和StringBuffer類別區別

  1. StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值,其實是兩個對象。

  2. String是對象,不是原始型別;為不可變對象,一旦被創建,就不能修改其值。

  3. 對於已經存在的String物件的修改,實際上是重新建立一個新的對象,然後把新的值存進去。

  4. String是final類,不能被繼承。

  5. StringBuffer是一個可變對象,當對它修改的時候,不會像String那樣重新建立對象,它只能透過建構函式來建立。物件被創立後,會分配記憶體空間,並初始保存一個null。向StringBuffer賦值的時候,可以透過它的append方法:obj.append("hello");

  6. 字串連線作業中StringBuffer的效率比String高。

  7. 如果程式中需要對字串進行頻繁的修改連接操作的話,使用StringBuffer效能會更高。

  8. 在String類別中,沒有用來改變已有字串中的某個字元的方法,由於不能改變一個java字串中的某個單獨字符,所以在JDK文檔中稱String類別的物件是不可改變的。

  9. 然而,不可變的字串有一個很大的優點:編譯器可以把字串設定為共享的。

  10. StringBuffer是線程安全的,在多執行緒程式中也可以很方便的進行使用,但是程式執行效率相對來說就要稍微慢一些。

  11. StringBuffer類別中的方法偏重於字串的變化,例如追加、插入和刪除等,這個也是StringBuffer和String類別的主要區別。

String與StringBuffer連接字串比較

  1. String str = new String("Hello World");str = "hello world";此字串連接的處理過程:

    (1)建立一個StringBuffer;
    (2)呼叫append()方法;
    (3)最後StringBuffer呼叫toString()給String重新賦值
    (4)這樣看來,String的連線操作,比StringBuffer多了一些操作,效率上就會打折扣。
    (5)而且,由於String是不可變對象,每次重新賦值都會重新創建新的對象,那麼原來的對象就沒用了,就要被垃圾回收,也影響性能。

  2. StringBuffer類別屬於一種輔助類,可預先分配指定長度的記憶體區塊建立一個字串緩衝區。這樣使用StringBuffer類別的append方法追加字符,比String使用「 」操作符添加字符到一個已經存在的字串後面有效率的多。

  3. 使用「 」運算子每一次將字元新增到一個字串中去時,字串物件都需要尋找一個新的記憶體空間來容納更大的字串,這無疑是一個非常消耗時間的操作。添加多個字元就意味著要一次又一次的對字串重新分配記憶體。使用StringBuffer就避免了這個問題。

#

以上是java中String和StringBuffer有何差別? (區別對比)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn