
JDK源碼閱讀:String類閱讀筆記
用于存儲String的字元。
<code>@Stable</code>注解表示變量最多被修改一次,稱為“穩定的”。
String的很多構造方法使用了數組或者其他一些集合來建立新的String,這些構造方法大多含有以下參數
集合S
取值左端點p
取值長度l
那麼需要一個方法來檢查這幾個參數是否合法,是以String類提供了<code>checkBoundsOffCount()</code>方法
如下是一個以bytes數組初始化String的例子,使用了上述方法。
同時,還有一個<code>checkBoundsBeginEnd()</code>方法
這個方法可以檢查begin、end以及length是否适配
這個常量用于表示是否支援字元串壓縮,預設為true。
在<code>coder()</code>方法内,要求傳回String的編碼,它是這樣實作的。
如果支援字元串壓縮,就正常傳回該字元串的coder,否則必須使用UTF16。
擷取value的長度,再根據字元集進行處理。
<code>coder()</code>的傳回結果如<code>LATIN1</code>、<code>UTF16</code>等都是位元組常量。
這個方法可以将String中的一部分轉化字元存到chars數組中。下面是一個簡單的使用示例。
輸出
當調用String的compareTo方法時,會根據字元串的編碼類型選擇不同類的靜态方法。而它們内部實作compare的算法都是類似的。下面給出一個例子。
String的哈希方法采用這個公式:$s[0]31^{(n-1)} + s[1]31^{(n-2)} + \cdots + s[n-1]$
下面是<code>StringLatin.hashCode()</code>
<code>replaceAll()</code>和<code>replaceFirst()</code>方法接受<code>regex</code>參數和<code>replacement</code>參數。<code>Pattern</code>類從調用<code>compile()</code>方法解析正規表達式<code>regex</code>傳回一個<code>Mathcher</code>,再調用它的<code>replaceAll()</code>或<code>replaceFirst()</code>方法。
String類中定義了LATIN1和UTF16兩個編碼格式
ISO Latin-1是8比特的字元集,定義了256個字元。前128個字元(00000000-01111111)與ASCII完全一緻。
是以使用LATIN1作為編碼格式時,往往要通過<code>&0xff</code>的方式取低八位
UTF-16也是采用可變長度編碼,可以是一個或者兩個16比特。