我們操作最多的資料就是文本,所以關於字串文本的內容顯得特別的重要。在這裡作一下總結。
跟字元有關的類如下:
一、Character 。Character 是對char的封裝對象,是對單個字元的操作。
二、String 。 String 對一串字元進行操作。不可變類。
1、String的定義
String也是一種引用資料類型,但它又和一般的類有點區別。
package test;public class StringDemo { public static void main(String[] args) { String str1 = new String("abc"); //上面句相當於下面的這兩句。所以說上面這句建立了兩個String 對象。String str2 = "abc"是一種隱式的建立對象方式,是String 特有的。 String str2 = "abc"; String str3 = new String(str2); System.out.println(str1 == str2); System.out.println(str2 == str3); System.out.println(str1 == str3); System.out.println(str1.equals(str2)); System.out.println(str1.equals(str3)); System.out.println(str2.equals(str3)); }}輸出結果:falsefalsefalsetruetruetrue
2、String 的比較
Object的equal方法是比較兩個對象引用地址是否相等,按這個來說str1.equals(str2)等應該是false才對,但結果是true,這是因為String
類中重寫的equals方法,比較的是兩個對象裡面存的值。因為兩個值相等所以是true;而==則比較的是兩個對象的引用地址。這點和平時
有點不一樣需要注意。
3、String的一些常用方法
char charAt(int index) //擷取某個點對應的字元
int compareTo(String otherString) //按字典順序比較大小 返回正數、負數或0 如"a".compareTo("c")=-2 "c".compareTo("a") = 2 其實就是Ascii碼比較,
從前面到後比較,當前面已經比較出大小,後面不再比較。
int indexOf(String str) // 某一子串第一次出現的索引位置
int indexOf(String str ,int fromIndex) //返回在此字串中第一次出現指定字元處的索引,從指定的索引開始搜尋。
int lastIndexOf(int ch) //返回指定字元在此字串中最後一次出現處的索引。
String subString(int beginIncex,int endIndex) //截取子串
....更多方法,新查看API文檔
4、StringBuffer 與StringBuilder
三、StringBuffer 。StringBuffer 是安全執行緒的可變字元序列。
StringBuffer 上的主要操作是 append 和 insert 方法,可重載這些方法,以接受任意類型的資料。每個方法都能有效地將給定的資料轉換成字串,
然後將該字串的字元追加或插入到字串緩衝區中。append 方法始終將這些字元添加到緩衝區的末端;而 insert 方法則在指定的點添加字元。
四、SringBuilder 。一個可變的字元序列。
此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個線程使用的時候
(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
總結:在選擇哪種類型儲存字串時,我們要根據實際情況而定。如果字串很少被修改,而僅僅是被查看時用String;如果會被經常修改,則考慮使用StringBuffer
或者是StringBuilder,進一步判斷,如果使用的字串對象會被多線程訪問時則用StringBuilder,如果不會被多線程訪問,則用StringBuffer。因為線程同步判斷是
要消耗資源的,會使訪問速度變慢。