[Java] Java String Pool

假如沒有string pool這樣的機制,遇到string就建立一個物件,這樣記憶體就很快就會爆掉了。

在java中採取Flyweight pattern作法,可以共享同樣的string object。

建立string object有兩種方式:

  1. String string = “Cat”;
  2. String string = new String(“Cat”);

採用第一種方法,會先檢查string pool是否有相同的string。若有就共用,沒有則建立之。

採用第二種方法﹐不會使用到string pool機制,而是在heap建立一個新的string object。若之後想要使用string pool機制,可以使用intern

範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class StringExample {

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));
System.out.println("s1 == s3.intern() ?" + (s1 == s3.intern()));
System.out.println("s1 equals s3 ?" + s1.equals(s3));
}
}

結果:

1
2
3
4
s1 == s2 ?true
s1 == s3 ?false
s1 == s3.intern() ?true
s1 equals s3 ?true

參考資料: