1. 程式人生 > >String類、StringBuilder類與StringBuffered類、equals方法與==、 常量池

String類、StringBuilder類與StringBuffered類、equals方法與==、 常量池

======================================================================= *String型別:(底層是字元陣列+對陣列的操作)   --特點:        (1)是不可變的字串型別,(不可變:物件的內容不能更改)        (2)final修飾的型別        (3)字元下標(索引/index)從0開頭        (4)重寫了equals方法和toString方法             (只要兩個字串所包含的字元序列相同,通過equals()比較將返回true)        (5)預設使用的是unicode字符集,[任意字元都佔兩個位元組]

   --構造器:        String():            建立一個空字元序列的字串物件(並不是返回null)        String(byte[] bs):                                 建立一個字串物件。使用預設字符集進行解碼的字串。        String(byte[] bs,String charset):                                 將位元組陣列使用指定字符集進行解碼成相應的字串物件        String(char[] ch):                                 將字元陣列轉換成字串物件        String(String str) :                                  指定一個字串字面量建立一個字串物件    --常用方法:         int length():                       返回字串物件的字元個數         char charAt(int index):                       獲取此字元序列中指定索引處的字元         String concat(String another):                      將指定字串another拼接到此字元序列的末尾(與字串拼接符"+"功能相同),返回新物件         boolean stratsWith(String prefix)/endsWith(String suffix)                      檢視此字元序列是否以prefix為字首/以suffix為字尾         byte[] getBytes():                      將此字串按照預設字符集編碼成位元組序列,返回一個新的位元組陣列         byte[] getBytes(String charset)                      將此字串按照指定的字符集編碼成位元組序列,返回新的位元組陣列         static String copyValueOf(char[] data):                      將字元陣列拼接成字串(與String(char[] ch)構造器的功能相同)       --查詢字串中的字元/子字串的位置:           int indexOf(int ch):                      返回字元ch在此字串中第一次出現的下標(索引/位置)           int indexOf(int ch,int fromIndex):                      返回字元ch從此字串fromIndex下標開始,往後第一次出現的位置           int indexOf(String str):                      找出子字串str在該字串中第一次出現的位置           int indexOf(String str,int fromIndex):                        注意:返回-1,說明要找字元/子字串 不存在查詢序列中                int lastIndexOf(int ch);                      找出字元ch在字串中最後一次出現的位置           int lastIndexOf(String str):           int lastIndexOf(int ch,int fromIndex):           int lastIndexOf(String str,int fromIndex):                      從某個下標開始,查詢字元/子字串,最後一次出現的位置。                      上述四個方法:                      查詢字元/子字串在此字元序列中最後一次出現的位置,找不到返回-1         --擷取子字串的方法:             String substring(int beginIndex)                        從此字元序列的beginIndex開始擷取,擷取到最後             String substring(int beginIndex,int endIndex)                        從此字元序列的beginInde開始擷取,擷取到endIndex          ###:包前不包後     --字串轉成字元陣列的方法:               char[] toCharArray():

                            將此字元序列變成字元陣列      --字串中的字母轉成大寫/小寫               String toUpperCase():                             將字串中的字母都變成大寫,返回新字串               String toLowerCase():                             將字串中的字母都變成小寫,返回新字串 

 --前後去空格的方法:               String trim():

                            去掉此字元序列的前與後的空格 

 --將任意引數變成字串物件               static String valueOf(Type v):

                            將引數v變成字串物件        

  ###:String型別中重寫了equals方法 ======================================================================= *StringBuilder:可變字串型別

     (字串:底層是字元陣列,及其對陣列的操作)        --特點:       (1)此型別是final修飾的       (2)沒有重寫equals方法       (3)此型別提供的大多數方法都帶有返回值,              即:  return this  返回同一個地址  --構造器:     StringBuilder():                               構造了一個空的StringBuilder物件,初始容量為16     StringBuilder(String str):                              建立一個指定字串的StringBuilder物件  --常用方法:    int length():                         返回有效字元的長度    StringBuilder append(Type a):                         將引數a追加到StringBuilder物件裡,返回此物件    StringBuilider insert(int index,Type a);                         將引數a插入到物件的下標index處     StringBuilder  delete(int start,int end);                         刪除此物件裡的部分字元,從start開始,到end結束          ###:[包前不包後]         StringBuilder replace(int start,int end,String str);                         使用str替換此物件從start開始到end結束的子串    StringBuilder reverse():                         將StringBuilder物件的內容進行翻轉                                                     *StringBuffer:此類與StringBuilder用法一模一樣。     ###:一旦通過StringBuffer生成了最終所想要的字串,就可以呼叫他的toString()方法,                 將其轉換成一個String物件.       但是:          線上程安全上考慮:          StringBuffer執行緒安全          StringBuilder執行緒不安全          在執行效率上:          StringBuffer效率低          StringBuilder效率高 (通常情況下,用它建立一個內容可變的字串物件)   練習:測試兩種型別的效率高低。

* String,StringBuilder,StringBuffer都實現了CharSequence介面,      因此,CharSequence可認為是一個字串協議介面. =======================================================================

*equals方法與==的區別        ==:用來比較是不是同一個物件,基本的資料型別和引用型別的資料都可以比較     equals:用來比較兩個物件的內容是否相同,只能比較引用資料型別    ======================================================================== *常量池:     jvm在使用字串型別時,為了提高記憶體的使用率,當使用字面量(常量)            給變數賦值時,在方法區內提供了用於儲存字面量物件的一個常量池。       --原理:          當使用字面量賦值時,先去方法區內的常量池中查詢是否有相同字面量的物件,          如果有,就返回常量池中物件的地址;          如果沒有,在常量池中建立此字面量的物件,          再返回           ----------------------------------------------------------------------- ###: 專門用於管理在編譯時被確定並被儲存在"已編譯的.class檔案"中的一些資料      (關於類,方法,介面中的常量,字串常量)              =======================================================================     思考題:記憶體中有多少個物件   String s1 = "123";   String s2 = "456";   String s3 = s1+s2;   String s5 = new String("123"+"456");//堆記憶體中