String類、Object類、包裝類
1.java.lang.String類
1.1String類的兩種例項化方式
- a.直接賦值,在堆上分配空間
- b.傳統方法(通過構造方法例項化String物件)
1.2字串相等比較(比較內容)
public boolean equals(String anotherString) ;//成員方法
str.equals(anotherString)
1.3字串常量是String的匿名物件
小tips: 如果要判斷使用者輸入的字串是否等同於特定字串,一定要 將特定字串(string常量)寫在前面,避免NullPointerException(空指標異常)
1.4
在我們JVM底層會自動維護一個字串的物件池,如果現在採用直接賦值的形式進行 string的物件例項化,該物件會自動儲存在這個物件池之中。如果下次繼續直接使用 直接賦值的模式宣告string物件,此時物件池中若有指定內容,則直接引用;如果 沒有,則開闢新的對空間後將其儲存在物件池中供下次使用
手工入池(本地方法):
public native String intern();
1.5字串常量不可變更
字串一旦定義後不可改變。
1.6字元與字串的相互轉換(***)
a.將字元陣列轉為字串
public String(char[] value);
public String(char[] value, int offset, int count);
b.將字串轉為單個字元
public char charAt(int index);
c.將字串變為字元陣列
String -> char[]
public char[] toCharArray ();
取得字串長度
public int length();
1.7 位元組(byte)與字串
a.將位元組陣列轉為字串(*****)
byte[] -> String
public String(byte[] value)
public String(byte[] value, int offset, int count)
b.將字串轉為位元組陣列(******)
String -> byte[]
public byte[] getBytes();
c.將字串按照指定編碼轉為位元組陣列
public byte[] getBytes(String charsetName) ;
1.8字串比較
a.不區分大小寫相等比較
public boolean equalsIgnoreCase(String anotherString);
b.比較兩個字串大小
public int compareTo(String anotherString);
①返回大於0:表示大於比較物件
②返回等於0:表示相等
③返回小於0:表示小於比較物件
1.9字串查詢(***)
public boolean contains(String str) ; //判斷str在本字元中是否存在
public boolean startsWith(String str); //判斷是否以指定字串開頭
public boolean startsWith(String str, int index);//從指定位置開始判斷是否以指定字串開頭
public boolean endsWith(String str); //判斷是否以指定字串結尾
1.10 字串替換
public String replaceAll(String regex, String replacement);//替換所有指定內容
public String replaceFirst(String regex, String replacement);//替換首個內容
1.11字串拆分
public String[] split(String regex);//將字串按照指定格式全部拆分
public String[] split(String regex, int limit);//將字串部分拆分,陣列長度為limit
1.12字串擷取
public String subString(int beginIndex);//從指定位置擷取到字串結尾[]
public String subString(int beginIndex, int endIndex);//擷取部分內容[)
1.13String類其他方法
a.去掉左右空格
public String trim();
b.轉大小寫
public String toUpperCase();//轉大寫
public String toLowerCase();//轉小寫
c.判斷字串是否為空(只能判斷是否為空字串而不是NULL)
public boolean isEmpty();
1.14兩隻sb-方便進行字串的修改-java.lang
- StringBuffer
- StringBuilder
a.字串修改
public StringBuffer append(各種資料型別)
b.StringBuffer <-> String
①String -> StringBuffer
呼叫StringBuffer的構造方法或append()
②StringBuffer -> String
StringBuffer.toString();
c.字串反轉
public StringBuffer reverse();
d.刪除指定範圍的資料
public StringBuffer delete(int start, int end);
e.插入資料
public StringBuffer insert(int offset,各種資料型別)
①String的內容不可修改,而兩隻sb可以改內容(append)
②StringBuffer採用同步處理,執行緒安全,效率較低
StringBuilder採用非同步處理,執行緒不安全,效率較高,String"+"底層會將String->StringBuilder
2.Object類(RealFather):最頂級的父類
Object類是java預設提供的類
java除了Object類,所有的類都存在繼承關係,預設會繼承Object父類,所有類物件都可以通過Object類進行接收
2.1取得物件資訊-toString()
直接使用物件輸出,預設輸出一個地址編碼。如果現在輸出的是String物件, 此時輸出字串內容而非地址,原因就在於String類覆寫了Object的toString()方法 System.out.println() 系統輸出預設會呼叫物件的toString() 如果預設給出的toString()功能不足(不想輸出地址而是輸出本類資訊), 需要在子類中覆寫toString()方法。
2.2物件的比較-equals()
2.3接收引用資料型別
Object類可以接收所有引用資料型別,包括:類、陣列、介面
包裝類
就是將基本資料型別封裝到類中
1.1分類
-
a.物件性包裝類(Object的直接子類):Boolean(boolean)、Character(char)
-
b.數值型包裝類(Number的直接子類),存在數值轉換異常:Byte(byte)、 Short(short)、Long(long)、Double(double)、Float(float)、Integer (int)
1.2裝箱與拆箱-基本資料型別與相應包裝類的資料處理
-
裝箱:將基本資料型別變為包裝類物件,利用每個包裝類提供的構造方法實現裝箱。
-
拆箱:將包裝類中包裝的基本型別值取出,利用Number類提供的xxValue()實現拆箱 處理。
阿里編碼規範:所有相同型別的包裝類物件之間的值比較,全部使用equals方法比較。 說明: 對於Integer var = ? 在-128~127之間的賦值,Integer物件在Integer常量池產 生,會複用已有物件,這個區間內的Integer值可以直接用==判斷。除此之外的所有 資料,都會在堆上產生,並不會複用已有物件。
使用int還是Integer?
a.【強制】所有POJO類(簡單java類,Bean)屬性必須使用包裝型別
b.【強制】RPC方法的返回值和引數必須使用包裝型別
c.【推薦】所有的區域性變數使用基本型別
1.3字串與基本型別的轉換
-
將字串轉為基本型別(靜態方法) 呼叫各個包裝類.parseXX(String str) Integer.parseInt(String str);
-
基本型別變為字串 a. “”+ b. 使用String類的valueof(基本型別),此方法不產生垃圾空間(推薦)