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");
在上面的語句中,將創建1
或2
個字串。如果池中已存在字串文字 - Cat
,則池中只會創建一個字串 - str
。如果池中沒有字串文字 - Cat
,那麼它將首先在池中創建,然後在堆空間中創建,因此將創建總共2
個字串對象。
上一篇:
java中方法重載和方法重寫的區別
下一篇:無