什麼是Java字串池?

java字串池是存儲在Java堆記憶體中的字串池。String是java中的特殊類,可以使用new運算符創建String對象,也可以用雙引號提供值。

1. Java字串池

下麵是一個圖表,清楚地解釋了如何在Java堆空間中維護字串池,以及當使用不同的方法創建字串時會發生什麼。

字串池有助於為Java Runtime節省大量空間,儘管創建String需要更多時間。

當使用雙引號創建一個String時,它首先在String池中查找具有相同值的String,如果存在那麼只是返回引用,否則它在池中創建一個新String,然後返回引用。

但是,使用new運算符,那麼將強制String類在堆空間中創建一個新的String對象。可以使用intern()方法將它放入池中,或者從具有相同值的字串池中引用另一個String對象。

下麵是String池的java示例程式:

public class StringPool {

    /**
     * Java String Pool example
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");

        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }

}

執行上面示例示例代碼,得到以下結果 -

s1 == s2 :true
s1 == s3 :false

字串池中創建了多少個字串?

有時在java面試中,會被問到字串池的問題。例如,在下面的語句中創建了多少個字串?

String str = new String("Cat");

在上面的語句中,將創建12個字串。如果池中已存在字串文字 - Cat,則池中只會創建一個字串 - str。如果池中沒有字串文字 - Cat,那麼它將首先在池中創建,然後在堆空間中創建,因此將創建總共2個字串對象。


上一篇: java中方法重載和方法重寫的區別 下一篇:無