1. 程式人生 > >Java String相關

Java String相關

() mutable efault char private pub efi 直接 hash

一.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相關