String類的使用

tdongmu發表於2020-11-26

String類

1.String類的不可變性:

                    1)String是一個final修飾的類,是不可以變的字元序列,不可被繼承的

                    2)String物件是儲存在一個char型別的陣列裡的

                    3)String實現了Serializable介面:表示字串支援序列化。

                                       實現了comparable介面:表示可以比較大小。

                    4)代表不可變的字元序列。體現:

                                       1.當對字串重新賦值時,需要重寫指定區域賦值,不能使用原有value進行賦值。

                                       2.當對原有的字串進行拼接時,也需要在指定區域重新賦值,不能使用原有value進行賦值。

                                       3.當呼叫String.replace();方法時,也需要在指定區域重新賦值,不能使用原有value進行賦值。

                    5)通過字面量的方式給一個字串賦值,此時的字串值宣告在字串常量池中。

                    6)字元產常量池是不會儲存內容相同的字串的

2.String類物件的建立:

                     1)通過字面量定義:String str=" ";在常量池中建立;

                     2) 通過構造器定義:String str =new String(); 在堆上建立物件,相當於建立了兩個物件;

 //字面量方式定義
        String s1="holle";
        String s2="holle";
        //構造器定義
        String s3=new String("holle");
        String s4=new String("holle");
        System.out.println(s1==s2);//ture
        System.out.println(s3==s4);//false
        System.out.println(s1==s3);//false
        //物件中String型別屬性賦值,屬於字面量方式定義的
        Cat cat1=new Cat("果然翁");
        Cat cat2=new Cat("果然翁");
        System.out.println(cat1.getName()==cat2.getName());//ture

面試題1:String str=new String("abc");在記憶體中建立了幾個物件?

兩個,一個是在隊中建立了一個物件,另一個是在常量池中建立的物件;

面試題2:寫出下面程式碼執行結果

       String p1="a";
        String p2="b";
        String p3="ab";
        String p4="a"+"b";
        String p5="a"+s2;
        String p6=s1+s2;
        final String p7="a";
        String p9=p7+"b";
        String p8=p5.intern;//返回值得到常量值中已經存在的"ab"
        System.out.println(p3 == p4);//ture
        System.out.println(p3 == p5);//false
        System.out.println(p3 == p6);//false
        System.out.println(p4 == p5);//false
        System.out.println(p5 == p6);//false
        System.out.println(p3 == p4);//ture
        System.out.println(p3 == p8);//ture

 p3,p4為兩個常量字串拼接可以在常量池中建立物件,p5,p6中包含變數拼接,若其中s1,s2改變則p5,p6都會改變,所以不會在常量池裡,而是在堆上建立的物件。

3.String類的常用方法

int length() 返回字串的長度: return value.length
char charAt(int index) 返回某索引處的字元 return value[index]
boolean isEmpty() 判斷是否是空字串: return value.length == 0
String toLowerCase() 使用預設語言環境,將 String 中的所有字元轉換為小寫
String toUpperCase() 使用預設語言環境,將 String 中的所有字元轉換為大寫
String trim() 返回字串的副本,忽略前導空白和尾部空白
boolean equals(Object obj) 比較字串的內容是否相同
boolean equalsIgnoreCase(String anotherString) equals 方法類似,忽略大 小寫
String concat(String str) 將指定字串連線到此字串的結尾。 等價於用“ +
int compareTo(String anotherString) 比較兩個字串的大小
String substring(int beginIndex) 返回一個新的字串,它是此字串的從 beginIndex 開始擷取到最後的一個子字串。
String substring(int beginIndex, int endIndex) 返回一個新字串,它是此字 符串從 beginIndex 開始擷取到 endIndex( 不包含 ) 的一個子字串。
boolean endsWith(String suffix) 測試此字串是否以指定的字尾結束
boolean startsWith(String prefix) 測試此字串是否以指定的字首開始
boolean startsWith(String prefix, int toffset) 測試此字串從指定索引開始的 子字串是否以指定字首開始
boolean contains(CharSequence s) 當且僅當此字串包含指定的 char 值序列 時,返回 true
int indexOf(String str) 返回指定子字串在此字串中第一次出現處的索引
int indexOf(String str, int fromIndex) 返回指定子字串在此字串中第一次出 現處的索引,從指定的索引開始
int lastIndexOf(String str) 返回指定子字串在此字串中最右邊出現處的索引
int lastIndexOf(String str, int fromIndex) 返回指定子字串在此字串中最後 一次出現處的索引,從指定的索引開始反向搜尋
注: indexOf lastIndexOf 方法如果未找到都是返回 -1
String replace(char oldChar, char newChar) 返回一個新的字串,它是 通過用 newChar 替換此字串中出現的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement) 使 用指定的字面值替換序列替換此字串所有匹配字面值目標序列的子字串。
String replaceAll(String regex, String replacement) 使 用 給 定 的r eplacement 替換此字串所有匹配給定的正規表示式的子字串。
String replaceFirst(String regex, String replacement) 使 用 給 定 的 replacement 替換此字串匹配給定的正規表示式的第一個子字串。
boolean matches(String regex) 告知此字串是否匹配給定的正規表示式。
String[] split(String regex) 根據給定正規表示式的匹配拆分此字串。
String[] split(String regex, int limit) 根據匹配給定的正規表示式來拆分此 字串,最多不超過 limit 個,如果超過了,剩下的全部都放到最後一個元素中

4.String類和其他結構之間的轉換

1.String與基本資料型別,包裝類之間的轉換。

String-->基本資料型別,包裝類:呼叫包裝類靜態方法:parseXxx(str)

基本資料型別,包裝類-->Sring:valueof(xxx)

2.String與char[]之間轉換

String-->char[]:toCharArrays();

char[]-->String:呼叫構造器:String str=new String(char[]);

3.String與byte[]之間的轉換

String-->byte[]:getBytes();

byte[]-->String:呼叫構造器:String str=new String(Bytes);



 

相關文章