1. 程式人生 > >String類、Object類、包裝類

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(基本型別),此方法不產生垃圾空間(推薦)