Java-三個特殊類
1.String類
1.1String的兩種例項化方式
a.直接賦值
String str=“hello”;
b.通過構造方法例項化String物件
1.2字串相等比較
str.equals(str1)
public boolean equals(String str1)
1.3字串常量是String類的匿名物件
小tips:在日後的開發過程之中,如果要判斷使用者輸入的字串是否等同於特定字串,一定要將特定字串寫在前面,避免NullPointerException。
1.4 String類兩種例項化的區別
1.採用直接賦值:
String str1 = "hello" ;
String str2 = "hello" ;
String str3 = "hello" ;
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // true
String類的設計使用了共享設計模式
在JVM底層自動維護一個字串物件池(物件陣列)。
如果採用直接賦值的模式進行String類的物件例項化操作,此物件將自動儲存到物件池中,如果下次繼續採用直接賦值的模式宣告String、物件,先去物件池中找是否有指定內容,如果有,直接引用。如果沒有,開闢新空間而後將其保
2.採用構造方法
在String類中提供有方法入池操作public String intern() ;(字串手工入池操作:)
面試題:請解釋String類中兩種物件例項化的區別
1. 直接賦值:只會開闢一塊堆記憶體空間,並且該字串物件可以自動儲存在物件池中以供下次使用。 2. 構造方法:會開闢兩塊堆記憶體空間,其中一塊成為垃圾空間,不會自動儲存在物件池中,可以使用intern() 方法手工入池。
因此,我們一般會採取第一種方式即直接賦值。
1.5字串不可變更
字串一旦定義不可改變
所有的語言對於字串的底層實現,都是字元陣列,陣列的最大缺陷就是長度固定。在定義字串常量時,它的內 容不可改變。
原則:
1. 字串使用就採用直接賦值。
2. 字串比較就使用equals()實現。
3. 字串別改變太多。
1.6字元與字串******
String<->char
字元陣列char[]<->String
public String(char[ ] value1);
public String(char[ ] value1,int offset,int count);
將字串按照索引轉為單個字元
String->char
public char charAt(int index)取得制定索引的字元返回
將字串轉為字元陣列
String->char[ ]
public char[ ] toCharArray();
1.7位元組與字串
1.7.1 byte-〉String
String構造方法
public String(byte bytes[ ])
String-〉byte[ ]
*****public byte[ ] getBytes(String charset)按照規定編碼轉為位元組陣列
1.8字串的比較
〉0表示本字串大於目標字串
=0 二者相等
〈0表示本字串小於目標字串
1.9 字串的查詢
- 判斷一個子字串是否存在
public boolean contains(CharSequence s)
- 判斷是否以指定字串開頭
public boolean startswith(String prefix)
- 從指定位置開始判斷是否以指定字串開頭
public boolean startswith(String prefix,int offset)
- 判斷是否以指定字串結尾
public boolean endswith(String suffix)
1.10字串的替換
1.11字串的拆分
特殊字元需要轉義後拆分 \\
eg:\\
1.12字串的擷取
2. 左閉右開
1.13字串的其他操作方法
1.14StringBuffer類andStringBuilder類
- 字串拼接方法
public synchronized StringBuffer append(各種資料型別 b)
- StringBuffer與String的相互轉換
- String變為StringBuffer:利用StringBuffer的構造方法或append()方法
- StringBuffer變為String:呼叫toString()方法。
除了append()方法之外,String也有一些String類
沒有的方法
- 字串的反轉
public synchronized StringBuffer reverse()
- 刪除指定範圍的資料
public synchronized StringBuffer delete(int start,int end)
- 字串的插入操作
public synchronized StringBuffer insert(int offset, 各種資料型別 b)
面試題:請解釋String、StringBuffer、StringBuilder的區別:
- String的內容不可修改,StringBuffer與StringBuilder的內容可以修改.
- StringBuffer(JDK1.0)採用同步處理,屬於執行緒安全操作,但效率較高;而StringBuilder(JDK1.5)採用非同步處理,屬於執行緒不安全操作,效率較高,當在String物件進行“+”,編譯時會將String類變為StringBuilder進行append處理。
Object類-最高參數統一化
Object類是Java預設提供的一個類。Java裡面除了Object類,所有類都是存在繼承關係的。預設繼承Object父類,即,所有的類的物件都可以使用Object進行接收
系統輸出預設呼叫物件的toString()方法
Object中的toString()只是簡單輸出當前所引用的類名稱以及物件地址,如果想在類中取的本類屬性資訊,需要覆寫toString();