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");//堆記憶體中