java字符串池_什么是Java字符串池?

java字符串池是存储在Java堆内存中的字符串池。String是java中的特殊类,可以使用new运算符创建String对象,也可以用双引号提供值。

1. Java字符串池

下面是一个图表,清楚地解释了如何在Java堆空间中维护字符串池,以及当使用不同的方法创建字符串时会发生什么。

dc63664596c87d56cd54e0f8e28486c7.png

字符串池有助于为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个字符串对象。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值