什么是Java字符串池?
时间:2020-02-23 14:34:43 来源:igfitidea点击:
顾名思义,java中的字符串池是存储在Java堆内存中的字符串池。
我们知道String是Java中的一个特殊类,我们可以使用新的运算符以及在双引号中提供值来创建String对象。
Java中的字符串池
字符串池之所以可能,是因为字符串在Java及其实现字符串内部化概念中是不可变的。
字符串池也是Flyweight设计模式的示例。
字符串池可以帮助节省Java Runtime的大量空间,尽管创建字符串需要花费更多时间。
当我们使用双引号创建一个String时,它将首先在String池中查找具有相同值的String,如果发现它只是返回引用,否则它将在池中创建一个新String,然后返回引用。
但是,使用new运算符,我们强制String类在堆空间中创建一个新的String对象。
我们可以使用" intern()"方法将其放入池中,或者从字符串池中引用另一个具有相同值的String对象。
这是字符串池镜像的Java程序:
package com.theitroad.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
在字符串池中创建了多少个字符串?
有时在Java面试中,系统会询问您有关字符串池的问题。
例如,在下面的语句中创建了多少个字符串;
String str = new String("Cat");
在上面的语句中,将创建1或者2个字符串。
如果池中已经有字符串文字" Cat",则池中将只创建一个字符串" str"。
如果池中没有字符串文字" Cat",则将首先在池中然后在堆空间中创建它,因此将总共创建2个字符串对象。