Java字符串池

1. String類的兩個構造方法

private final char value[];
private int hash;

public String() {
    this.value = "".value;
}
public String(String original) { this.value = original.value; this.hash = original.hash; }

2. new String中建立幾個String對象?

1)建立兩個String對象

public static void main(String[] args) {
    String y = new String("hello");
}

內存模型以下:java

2)建立一個String對象

public static void main(String[] args) {
    String x = "hello";
    String y = new String("hello");
}

內存模型以下:this

3. String的intern方法

String類私有地維護着一個初始爲空的字符串池,當調用intern方法時:spa

1. 若字符串池中已包含一個等於此String對象的字符串(用 equals方法肯定),則返回池中的字符串。
2. 不然,將此String對象添加到字符串池中,並返回池中的字符串。code

public native String intern();

字符串池中存放的是String對象的引用,而非String對象自己。對象

實驗:blog

public static void main(String[] args) {
    String x = "hel";
    x += "lo";
    String y = "ja";
    y += "va";
    System.out.println(x == x.intern()); // true
    System.out.println(y == y.intern()); // false
}

結論:字符串池中已包含一個等於"java"的字符串(JVM啓動後在字符串池中加載的字符串還包括:"true"、"false"...)內存

內存模型以下:字符串

intern()前hash

intern()後io

4. 後記

相關文章
相關標籤/搜索