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中方法重载和方法重写的区别
下一篇:无