Java-常用類String
阿新 • • 發佈:2021-01-03
在整個JDK中String是比較特殊的一個類,接下來我們通過檢視原始碼以及一些例子仔細分析下String類
宣告
public final class String implements java.io.Serializable, Comparable<String>, CharSequence
通過檢視String類我們發現:
- String宣告時被final修飾符修飾,說明不可被繼承;
- 實現了Serializable介面,說明支援序列化;
- 實現了Comparable介面,說明String是可以比較大小的;
例項方式
String s1 = "Hello World"; // 字面量定義 String s2 = new String(); String s3 = new String(String original); String s4 = new String(char[] a); String s5 = new String(char[] a, int startIndex, int count);
String在JVM記憶體模型中的大致分析
String s1 = "abc";
String s2 = "abc"
System.out.println(s1 == s2);
由圖可見通過字面量定義的s1是直接指向JVM方法區的常量池中"abc"的地址,同時在JVM中字串常量池不會儲存兩個內容相同的字串所以s1和s2都是執行同一塊地址,通過執行上面程式碼得到的結果為true也能很好的證明這一點。
值得注意的是通過
String s3 = new String("abc");
則是先指向堆中new出來的String例項再由堆指向方法區常量池中"abc"的地址,如下圖所示:
不可變性
從上述程式碼執行結果可以看出雖然s2被重新賦值為"hello"但是由於String的不可變性s1並未被改變還是為"abc",所以當對字串重新賦值時需要重寫指定區域賦值,不能在原有的值上進行賦值。同時拼接、替換也都如此。