java特殊類---String

String類倆種實例化方式

字符串相等比較*

string類匿名對象---字符串常量

String類不可變更操作*

對象池*

String類提供的方法

作爲javase的一個類,String也存在構造方法,對於String對象的實例化可以通過直接賦值構造方法初始化倆種方式。


1.比較字符串:equals()方法

比較大小通常有倆種方式:
1)==
2)equals()
在比較String對象的時候,我們會發現這倆種方式存在着很大的區別:

1)==:數值的比較,比較的是對象的內存地址數值。
2)equals():進行字符串內容的比較。

2.字符串常量---String類的匿名對象

java中本身沒有字符串常量的概念,基本上都是string類匿名對象。

在這裏補充一點點小知識:
如果在以後開發中,string匿名對象需要和一個用戶輸入的字符串比較,
那麼匿名對象要寫在字符串前面:"字符串常量".equals(str),
這是爲了避免用戶輸入的str=null出現NullPointerException

3.String類倆種實例化的區別

1)直接賦值
連續多次採用直接賦值的方式進行String對象實例化,並且賦同一個值
用“==”對這些對象進行比較,會發現結果都爲true
之前說過“==”比較的是對象所在內存的地址
因此"這些對象都指向同一塊棧內存"
在實例化第一個對象後,"再沒有開闢新的內存",why?
(“String類的設計採用共享設計模式”)
在這裏引入一個"對象池","JVM底層會自動維護一個對象池(字符串對象池)",
當採用直接賦值的方式進行string對象的實例化時,那麼該實例化對象(內容)會"自動保存"在這個對象池中,
當"下次再"次採用直接賦值方式進行實例化時,
此時對象池中如"有指定內容,則直接引用";
否則,開闢新的字符串對象將其保存在對象池中‘供下次使用“。
對象池:--一個對象數組(爲了減少開銷)

2)構造方法
對 String str = new String("hello");進行分析
①此方式會開闢倆塊堆內存空間:
   一塊爲垃圾空間:存着"hello"
   另一塊是new的空間,也存"hello",由堆指向
②對共享存在影響,new的String對象不會自動入池,
但是採用public native String intern()會進行手工入池
String str = new String("hello").intern;

3)"區別"
直接賦值:只會開闢一塊棧內存空間,並且可以數據共享(字符串對象自動存入對象池供下次使用)
構造方法:會開闢倆塊棧內存空間,其中一塊是垃圾空間,
   不會自動保存在對象池中,但是可以採用intern()手工入池;

5.字符串常量不可變更

對字符串進行"+"操作時,"棧的指向在變;而內容沒變",只是存放"內容的空間成爲了垃圾空間"而已。
當進行大量字符串改變的操作時,就會產生大量的垃圾空間

使用String原則

 

1.採用直接賦值進行賦值
2.採用equals()進行比較
3.不要過多對string對象進行改變操作

 


6.String中提供的灰常good的方法

1)字符與字符串相互轉換***

1.String->char[]
public char[] toCharArray(String str)

2.char[]->String
public String(char[] value)
public String(char[] value,int offset,int length);

3.String->char
public char toChar(int index);

4.取得字符串長度
public int length();

2)字節與字符串

1.byte[]->String
public String(byte[] values);

2.String->byte[]
public byte[] getBytes(String str);

3.String->byte 按照指定編碼
public byte[] getbytes(String chareseName);

3)字符串比較

區分大小寫:
public boolean equals(Object obj);
public int compareTo(String anothorString);
返回值:== 0  倆個字符串相等
       >0     大於比較anothor對象
       <0     小於比較another對象

不區分大小寫:

public boolean equalsIanoreCase(String str);

 

4)字符串查找*******

public boolean contains(String str);
public boolean startsWith(String str);
public boolean startsWith(Stirng str,int dex);//指定位置開始
public boolean endsWith(String str);

5)字符串替換----與正則表達式有關

public String replaceAll(String regex,String repalxement);
//替換所有的regex爲replacement

public String replaceFirst(String regex,String replacement);
//替換遇到的第一個regex爲replacement

6)字符串拆分

public String[] split(String regex);

public String[] aplit(String regex ,int limit);
//數組長度是limit

7)字符串截取

public String substring(int beginIndex); //從指定位置到結尾

public String substring(int beginIndex,int endIndex);
//截取指定內容

8)其他方法

public String trim();去掉左右空格,保留中間空格

public String toUpperCase();轉大寫
public String toLowerCase();轉小寫

public boolean isEmpty();
判斷字符串是否爲空字符串(長度爲0),不能判空
str != null ||str.isEmpty

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章