深入瞭解Java核心類庫–String類

一、 簡介

零碎知識點

  • extends Object
    • implements serializable,Comparable< String >,charSequence
  • String類表示字符串,所有字符串文字都是此類的對象
  • 字符串是不變的,值在創建後無法更改
  • 對象一旦聲明則不可改變,改變的隻是地址,原來的字符串還是存在的,並且產生垃圾
  • 任何一個“”都為字符串對象,無賦值則為匿名對象
  • 用“+”拼接字符串盡量避免,一般用append+toString
  • StringBuilder(線程不安全)和StringBuffer(線程安全),忽略線程安全,其它都一樣

由於String對象是不可變的,所以可以共享(即兩個字符串一樣則共享同一塊內存地址)

//共享
String t1 = "123";
String t2 = "123";
System.out.ptintln(t1 == t2);//true,(== 比較的是內存地址)

字符串常量池

存在於方法區(加載代碼的內存區),被所有的線程共享

堆在邏輯上的劃分

堆在邏輯上被分為三部分:

新生代:存儲剛創建的對象(GC詢問次數最多為15次,>15則進入老年代)

老年代:垃圾回收次數超過15次(即15次之後依然存活的對象)

永久代:靜態修飾的所有東西(類、方法、常量…)

每一個字符串對象的創建都會放入永久代(每次創建都先去永久代,前提:不用new,new開辟新內存)

二、 創建對象

2.1.1 直接引用常量區

String s = ” “;

String str = “abc” ;

2.1.2 使用構造方法

String()

String str = new String(“abc”); 

2.1.3 兩種實例化方法的區別

區別

直接賦值:

隻開辟一塊堆內存空間,並且會自動入池,不會產生垃圾會將匿名對象“”放入對象池,下一次不同對象直接賦值時直接利用池中已經存在的匿名對象

構造方法:

在堆內存創建對象會開辟兩塊堆內存空間,其中一塊堆內存會變成垃圾被系統回收,而且不能夠自動入池,需要通過public String intern();方法進行手工入池。

三、常用方法

Modifier and Type Method Description
char charAt​(int index) 返回指定索引處的 char值。
int compareTo​(String anotherString) 按字典順序比較兩個字符串。
boolean endsWith​(String suffix) 測試此字符串是否以指定的後綴結尾。
boolean equals​(Object anObject) 將此字符串與指定的對象進行比較。
boolean equalsIgnoreCase​(String anotherString) 將此 String與另一個 String比較,忽略瞭大小寫。
void getChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin) 將此字符串中的字符復制到目標字符數組中。
int indexOf​(int ch) 返回指定字符第一次出現的字符串中的索引。
int indexOf​(int ch, int fromIndex) 返回指定字符第一次出現的此字符串中的索引,從指定索引處開始搜索。
int indexOf​(String str) 返回指定子字符串第一次出現的字符串中的索引。
int indexOf​(String str, int fromIndex) 從指定的索引處開始,返回指定子字符串第一次出現的字符串中的索引。
boolean isEmpty() 返回 true ,當且僅當, length()是 0 。
int lastIndexOf​(int ch) 返回指定字符最後一次出現的字符串中的索引。
int lastIndexOf​(int ch, int fromIndex) 返回指定字符最後一次出現的字符串中的索引,從指定的索引開始向後搜索。
int lastIndexOf​(String str) 返回指定子字符串最後一次出現的字符串中的索引。
int lastIndexOf​(String str, int fromIndex) 返回指定子字符串最後一次出現的字符串中的索引,從指定索引開始向後搜索。
int length() 返回此字符串的長度。
String repeat​(int count) 返回一個字符串,其值為此字符串的串聯重復 count次。
String replace​(CharSequence target, CharSequence replacement) 將此字符串中與文字目標序列匹配的每個子字符串替換為指定的文字替換序列。
String replaceAll​(String regex, String replacement) 將給定替換的給定 regular expression匹配的此字符串的每個子字符串替換。
String replaceFirst​(String regex, String replacement) 將給定替換的給定 regular expression匹配的此字符串的第一個子字符串替換。
boolean startsWith​(String prefix) 測試此字符串是否以指定的前綴開頭。
boolean startsWith​(String prefix, int toffset) 測試從指定索引開始的此字符串的子字符串是否以指定的前綴開頭。
String stripLeading() 返回一個字符串,其值為此字符串,並刪除瞭所有前導 white space 。
String stripTrailing() 返回一個字符串,其值為此字符串,並刪除所有尾隨 white space 。
CharSequence subSequence​(int beginIndex, int endIndex) 返回作為此序列的子序列的字符序列。
String substring​(int beginIndex) 返回一個字符串,該字符串是此字符串的子字符串。
String substring​(int beginIndex, int endIndex) 返回一個字符串,該字符串是此字符串的子字符串。
char[] toCharArray() 將此字符串轉換為新的字符數組。
String toLowerCase() 使用默認語言環境的規則將此 String所有字符轉換為小寫。
String toUpperCase() 使用默認語言環境的規則將此 String所有字符轉換為大寫。
String toUpperCase​(Locale locale) 使用給定 Locale的規則將此 String所有字符轉換為大寫。
static String valueOf​(T i) 返回T參數的字符串表示形式。

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: