1. 程式人生 > >String、Object、包裝類的常用方法以及注意點

String、Object、包裝類的常用方法以及注意點

  

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類兩種例項化的區別

  •   採用直接賦值:

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[ ] yoCharArray();

 

6.位元組與字串

6.1 byte[]->String

String類構造方法

public String(byte[] bytes)

 

String->byte[]

****************public byte[] getBytes()******************

public byte[] getBytes(String charset):按照指定編碼轉為位元組陣列。

7.字串比較

7.1 不區分大小寫的相等比較

public boolean equalsIgnoreCase(String anotherString)

7.2 比較兩個字串的關係

public int compareTo(String anotherString)

  • >0 :表示本字串大於目標字串
  • =0:表示兩者相等
  • <0:表示本字串小於目標字串

8.字串查詢

8.1判斷指定字串是否存在

public boolean contains(CharSequence s)

8.2 判斷是否已指定字串開頭

public boolean startswith(String prefix)

public boolean startswith(String prefix,int offset)

8.3判斷是否已指定字串結尾

public boolean endswith(String suffix)

9.字串替換

public String replaceAll(String regex,String replacement)

將目標字串全部替換

str.replaceAll("l","_"):將全部的l換成—

10.字串拆分(******)

public String[].split(String.regex):將字串全部拆分

public String[].split(String.regex,int.limit):將字串部分拆分 特殊字元需要轉義後拆分\\

eg:\\.

11.字串擷取(*****************)

public String substring(int beginIndex):從指定索引擷取到結尾

public String substring[int beginIndex,int endIndex):從指定索引擷取部分內容

12.字串的其他操作方法

a.去除字串的左右空格,保留中間空格

b.字串轉大小寫(全部大小寫)

public String toUpperCase();

public String toLowerCase();

c.判斷字串是否為空字串(" ",不判斷null)

public boolean isEmpty();

3.兩隻sb(StringBuffer,StringBuilder)-面試

1字串拼接方法 public synchronized StringBuffer append(各種資料型別 );

2.StringBuffeer與String的相互轉換 String->StringBuffer:

a. append()

b. 呼叫StringBuffer的構造方法new StringBuffer("");

StringBuffer->String

呼叫StringBuffer.toString();

3.StringBuffer常用操作方法

3.1字串反轉

reverse():StringBuffer

3.2刪除指定範圍的資料

delete(int start,int end):

StringBuffer insert(int offset,各種資料型別):

StringBuffer 請解釋String,StringBuffer,StringBuilder的區別:

1.String的內容不可改變,兩隻sb可以改變。

2.StringBuffer(JDK1.0),採用同步處理,執行緒安全,效率較低。

StringBuilder(JDK1.5),採用非同步處理,執行緒不安全,效率較高,當在String物件進行“+”,

編譯時會將String類變為StringBuilder進行append()處理。

Object類(RealFather)-最高參數統一化

Object是JDK預設提供的一個類。Java裡面除了Object類,所有的類都是存在繼承關係的。

預設會繼承Object父類。 即,所有類的物件都可以使用Object進行接收。

4.1 toString()-取得物件資訊

  • 系統輸出預設呼叫物件的toString()方法。

Object類toString()只是簡單輸出當前所引用的類名稱以及物件地址。

如果想在類中取得本類屬性資訊,需要覆寫toString();

4.2 equlas()-物件比較

4.3接收引用資料型別。

Object可以接收所有引用資料型別:陣列、類、介面。

5.包裝類-使用Object接收一切東西 包裝類就是將基本資料型別封裝到類中。

5.1 包裝類的分類

a.數值型包裝類(Number的直接子類):byte、double、short、long、float、integer(int)

會發生型別轉換異常.NumberFormatException

b.物件型包裝類(object的直接子類):Boolean、character(char)

5.2 裝箱與拆箱

裝箱:將基本資料型別變為包裝類物件。利用每個包裝類提供的構造方法實現。

拆箱:將包裝類中包裝的基本資料型別取出。利用xxValue();

對於Integer var = ? 在[-128-127]的賦值,Integer物件在常量池中產生,回覆用已有物件;這個區間外的所有資料,都在堆上產生,不回覆用已有物件。

 

結果:true

           false

阿里編碼規範:int or integer?

  • 【強制】所有的 POJO 類(簡單Java類,類中只有成員變數、構造方法、getter/setter)屬性必須使用包裝資料型別。
  • 【強制】RPC 方法的返回值和引數必須使用包裝資料型別。
  • 【推薦】所有的區域性變數使用基本資料型別。

5.3 包裝類與字串的轉換

5.3.1 String->基本資料型別

包裝類。parseXX(str);

String ->int:Integer.parseInt(str);

5.3.2 基本資料型別->String

a. ""+基本資料型別

b.String類提供的靜態方法valueOf(基本型別),此方法不產生垃圾