java翻译数字串并打印_翻译-Java字符串池

正如名字所示:Java中字符串池存储在堆内存中。我们知道java中String是一个特殊的类,我们可以通过new 操作符或者使用双引号“”创建一个String对象。

Java里的字符串池

字符串池中创建了多少字符串对象?

Java里的字符串池

下面是一个图,清晰的解释了java堆内存怎么管理字符串池的。以及当我们使用不同的方式创建字符串时发生了什么。

8f877b1e23a6b0e875d305fbdd645aea.png

字符串池是可行的,只是因为在Java中String是不可变类型的。而且它实现了字符串的interning 概念。

字符串池是享元设计模式的一个实例。

字符串池有助于为Java运行时节省了很多的内存空间,即使它使用了更多的时间。

当我们使用双引号创建字符串时,它首先在字符串池中寻找同样值的字符串,如果找到了就返回该引用。如果没找到,就在池中创建一个新的字符串并返回它的引用。

然而使用new操作符创建字符串时,我们强制String类在堆内存上创建一个新的String对象。我们可以使用intern() 方法将它放到String池中。或者指向字符串池中有相同值字符串对象的引用。

下面是java程序:

package com.journaldev.util;

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

字符串池中创建了几个String对象呢?

有时候在Java面试中,你可能被问到关于字符串池的问题,比如,下面的语句创建了几个string.

String str = new String("Cat");

在上面的语句中,1个或者2个string被创建了,如果字符串池中已经有’cat‘字符串了,就只创建一个String.如果字符串池中没有’cat‘字符串,首先在字符串池中创建一个字符串,然后在堆内存中创建一个字符串,所有总共有2个string对象被创建了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值