標籤:
一、琅序
本博文來源於轉載,原博文地址為: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詳解