標籤:大小寫 lower others limit string 運行 分析 lang 緩衝
一.String類的常用方法
1. int indexOf(String s) 字串尋找2. int lastIndexOf(String str) 3. char charAt(int index) 擷取指定索引位置的字元4. String substring(int beginIndex) 擷取子字串5. String substring(int beginIndex, int endIndex)6. String trim() 去除空格7. boolean startsWith(String prefix) 判斷字串的開始與結尾8. boolean endsWith(String suffix) 9. boolean equals(String otherstr) 判斷字串是否相等10. boolean equalsIgnoreCase(String otherstr) 11. int compareTo() 按字典順序比較兩個字串12. String toLowerCase() 字母的大小寫轉換13. String toUpperCase()
14. String[] split(String regex) 字串分割15. String[] split(String regex, int limit)16. static String valueOf(boolean,char(char[]),int,long,float,double,Object) 得到各種類型的字串表示
17. String intern() 為每一個唯一的字元序列產生一個且僅產生一個String引用,intern:放入的意思,放入常量池
二.String類的特性
在 JAVA 語言中有8中基本類型和一種比較特殊的類型String。這些類型為了使他們在運行過程中速度更快,更節省記憶體,都提供了一種常量池的概念。常量池就類似一個JAVA系統層級提供的緩衝。8種基本類型的常量池都是系統協調的,String類型的常量池比較特殊。它的主要使用方法有兩種:
- 直接使用雙引號聲明出來的
String對象會直接儲存在常量池中。
- 如果不是用雙引號聲明的
String對象,可以使用String提供的intern方法。intern 方法會從字串常量池中查詢當前字串是否存在,若不存在就會將當前字串放入常量池中
String 有 3 個基本特點:
1. 不變性(唯讀特性);
2. 針對常量池的最佳化;
3. 類的 final 定義。
不變性指的是 String 對象一旦產生,則不能再對它進行改變。String 的這個特性可以泛化成不變 (immutable) 模式,即一個對象的狀態在對象被建立之後就不再發生變化。不變模式的主要作用在於當一個對象需要被多線程共用,並且訪問頻繁時,可以省略同步和鎖等待的時間,從而大幅提高系統效能。
針對常量池的最佳化指的是當兩個 String 對象擁有相同的值時,它們只引用常量池中的同一個拷貝,當同一個字串反覆出現時,這個技術可以大幅度節省記憶體空間。
String類中的每一個看起來會修改String值的方法,實際上都是建立了一個全新的String對象,以包含修改後的字串內容。(外部(例如重新賦值)和內部修改都是重新建立了一個新的String對象)
為什麼不變?源碼分析:
String 對象可以認為是 char 數組的延伸和進一步封裝,它主要由 3 部分組成:char 數組、位移量和 String 的長度。char 數組表示 String 的內容,它是 String 對象所表示字串的超集。String 的真實內容還需要由位移量和長度在這個 char 數組中進行定位和截取。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence{ /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private final int offset; /** The count is the number of characters in the String. */ private final int count; /** Cache the hash code for the string */ private int hash; // Default to 0
Java7中略有改變:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0
在JDK7中,只有一個value變數,也就是value中的所有字元都是屬於String這個對象的
三.編譯器對String的最佳化
1.用於String的“+”與“+=”是Java中僅有的兩個重載過的操作符
2.重載“+”與StringBuilder
當String對象之間通過“+”串連時,編譯器自動引入了java.lang.StringBuilder類。雖然我們在源碼中沒有使用StringBuilder類,但是編譯器卻自作主張地使用了它,因為它更高效。
Java String相關