什麼是Java字串池?

2019-10-16 22:23:36

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個字串物件。