Java的String和StringBuffer和StringBuilder詳解

來源:互聯網
上載者:User

標籤:

一、琅序

  本博文來源於轉載,原博文地址為:http://blog.chinaunix.net/uid-301743-id-5032902.html

 

二、內容

前言

最近發現團隊成員在Java代碼方面的品質不夠高,準備寫一些基礎的文章,供大家參考。

一、定義

String是不可變字元序列。
StringBuffer是可變的字元序列。
StringBuilder也是可變的字元序列。

1、StringBuffer和StringBuilder的唯一區別

StringBuffer對象是安全執行緒的,這意味著StringBuffer對象可以同時被多個並行線程修改,因為它所有的方法都被聲明為"synchronized(同步)"。
StringBuilder類是JDK 1.5版引入的非安全執行緒的類,這意味著它的所有方法都是非同步方法。
因此,在單一模型的應用中,我們應該使用StringBuilder,這樣對象不會有鎖定和解鎖,這樣效能就會增加。
而在單執行緒模式應用中,會按順序執行操作,因此對象不會崩潰。

2、什麼時候選擇String和StringBuffer

如果我們不需要在同一記憶體空間中儲存字串的修改,那麼我們必須使用String。
而如果需要在同一記憶體空間中儲存字串的修改,那麼我們必須使用StringBuffer或StringBuilder。

3、String的優缺點

優點:使用String時,如果字串發生修改,那麼修改後的內容會儲存在記憶體中的不同位置,這樣的話,記憶體中就同時有原始的字串值和修改後的字串值。
缺點:對於每一個這樣的操作,它會消耗更多的記憶體,因為它把修改後的字串值儲存在新的記憶體空間中。因此它會導致效能問題。
解決方案:要解決這個效能問題,開發人員應該使用StringBuilder或者StringBuffer來實現字串的修改,然後再轉換成String對象把字串傳遞給使用者。

4、StringBuffer和StringBuilder的優缺點

優點:StringBuffer和StringBuilder有更好的效能,因為它們對記憶體的消耗更少,所有對字串的修改操作都儲存在同一記憶體位置。
缺點:修改前的原始字串值不會被保留。

二、建立String或StringBuffer對象

String對象的建立有兩種方式
1)直接使用字串賦值建立對象

String str = "instance of java for us"; 

2)使用String構造器建立對象

String str = new String("instance of java for us"); 

StringBuffer對象的建立
使用構造器

StringBuffer str = new StringBuffer(); 

StringBuilder對象的建立
使用構造器

StringBuilder str = new StringBuilder(); 
三、在StringBuffer和StringBuilder只能執行指定的操作

可以執行字串的追加、插入、刪除、反向等操作
因為String對象是不可變的對象,因此這些操作不能在String對象中執行。

四、字串的串連

使用String對象來把新字串串連到現有的字串上,有兩種方法:

1、使用“+”操作符2、使用concat()方法

而使用StringBuffer連接字串,只有一種方法:使用append()方法
而使用StringBuilder連接字串,只有一種方法:使用append()方法
範例程式碼:

package com.ch;public Class Demo{public static void main(String args[]) {    String str="Java";    StringBuffer sb= new StringBuffer("Java");    StringBuilder sbr= new StringBuilder("Java");    System.out.println(str.concat(" language"));        System.out.println(sb.append(" language"));    System.out.println(sbr.append(" language"));    }} 

輸出:

Java languageJava languageJava language 
五、比較

Object對equals()方法的定義是:對象a和b如果是同一個對象的引用,那麼a.equals(b)返回true,否則返回false。
而String類重寫了Object的equals()方法,String對象的equals()方法比較的是內容,內容相等則返回true。
StringBuffer和StringBuilder則沒有重寫equals()方法,與Object的equals()方法的定義相同。

 

 

 

 

----------------------------------------致青春----------------------------------------

Java的String和StringBuffer和StringBuilder詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.