String:表明不可變的字符序列,是一個終態類,不能被繼承。字符串是常量,聲明以後不能改變其值。api
在對String類型的對象進行操做時,好比使用「+」對字符串拼接,是會產生新的對象。這就會對字符串的操做效率大大下降。當須要頻繁修改字符串時,不建議用String類。數組
對字符串比較時,不建議使用「==」,而是用equals()方法。在String類中,已經對equals()從新。安全
StringBuffer:是可變的字符序列,是線程安全的,同步的。它在對字符串進行操做時,使用的是append()方法,在字符串的後面追加字符串,可是不產生新的對象。這樣對字符串操做的效率較高。在Java中若是對字符串進行大量的操做,建議使用 StringBuffer。多線程
StringBuilder:是可變的字符序列,不是線程安全的,不一樣步。它與StringBuffer相似,可是不是線程安全的,效率很高,用在字符串緩衝區被單個線程使用的時候,建議優先採用該類。將 StringBuilder 的實例用於多線程是不安全的。若是須要這樣的同步,則建議使用 StringBuffer。app
String s1 = newString(」hello」);ide
String s2 = newString(」hello」);ui
String s3 = 「hel」;spa
String s4 = 「lo」;.net
String s5 = s3+s4;線程
String s6 = 「hel」;
System.out.println(s1 == s2);//false,指向的不是同一個對象。
System.out.println(s3 == s6);//true
System.out.println(s1 == s5);//false s5產生的是一個新的對象。
Java中使用(==)來比較,對於基本數據類型比較的是其變量的值,對於引用數據類型比較的是變量的引用地址。
String 類中經常使用的方法
intcompareTo(String value): 指定者:接口 Comparable 按字典順序比較兩個字符串。若是兩個字符串相等,則返回 0;若是字符串在參數值以前,則返回值小於 0;若是字符串在參數值以後,則返回值大於 0
public int length(),字符串的長度
public char charAt(int index),返回一個在字符串中索引是index的char類型的字符。此方法能夠將一個字符串轉換成char類型的數組。同時,也可使用new String(char[] ch)將char類型的數組,在String聲明時轉換成一個字符串。
boolean startsWith(Stringvalue) 檢查一個字符串是否以參數字符串開始。
booleanendsWith(String value)檢查一個字符串是否以參數個字符串結束。
public int indexOf(int ch):返回指定字符ch在此字符串中第一次出現處的索引值;若是未出現該字符,則返回 -1。
public int indexOf(int ch, int fromIndex): fromIndex - 開始搜索的索引
public int lastIndexOf(intch) 返回最後一次出現的指定字符在此字符串中的索引值;若是未出現該字符,則返回 -1。
public int lastIndexOf(Stringstr) 返回最後一次出現的指定子字符串str在此字符串中的索引值;若是未出現該字符串,則返回 -1。
public String substring(intindex)提取從位置索引index開始直到此字符串末尾的這部分子字符串
public String substring(intbeginIndex, int endIndex)提取從 beginindex開始直到 endindex(不包括此位置)之間的這部分字符串
public String concat(Stringstr): 將指定字符str串聯接到此字符串的結尾成爲一個新字符串返回。
public String replace(charoldChar, char newChar) 返回一個新的字符串,它是經過用 newChar 替換此字符串中出現的全部 oldChar 而生成的。
public String trim() 返回字符串的副本,忽略前導空白和尾部空白
public String toUpperCase(); 將此字符串中的全部字符都轉換爲大寫
public String toLowerCase(); 將此字符串中的全部字符都轉換爲小寫
public int length()得到此字符串的長度
StringBuffer:經常使用的方法
StringBuffer append(Stringstr):將指定的字符串追加到此字符序列。
StringBuffer insert(intoffset, String str) 將字符串str插入此字符序列指定位置中。
int length( ):肯定 StringBuffer 對象的長度
void setCharAt(int pos, charch) 使用 ch 指定的新值設置 pos指定的位置上的字符
String toString( )轉換爲字符串形式
StringBuffer reverse() 反轉字符串
StringBuffer delete(intstart, int end) 此方法將刪除調用對象中從start 位置開始直到 end 指定的索引– 1 位置的字符序列
StringBuffer deleteCharAt(intpos) 此方法將刪除 pos 指定的索引處的字符
StringBuffer replace(intstart, int end, String s):此方法使用一組字符替換另外一組字符。將用替換字符串從 start 指定的位置開始替換,直到end 指定的位置結束
StringBuilder的用法和StringBuffer的用法是一致的。瞭解更詳細的請看官方文檔,或者在線查看http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Java API 文檔
2017-11-30 new String的內存分配過程。