1. 程式人生 > 實用技巧 >Java-常用類String

Java-常用類String

在整個JDK中String是比較特殊的一個類,接下來我們通過檢視原始碼以及一些例子仔細分析下String類

宣告

public final class String implements java.io.Serializable, Comparable<String>, CharSequence 

通過檢視String類我們發現:

  1. String宣告時被final修飾符修飾,說明不可被繼承;
  2. 實現了Serializable介面,說明支援序列化;
  3. 實現了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",所以當對字串重新賦值時需要重寫指定區域賦值,不能在原有的值上進行賦值。同時拼接、替換也都如此。