【java基础】String Pool

来源:互联网 发布:17年10美国非农数据 编辑:程序博客网 时间:2024/05/16 18:17

String Pool正如它的名字所说明的那样,是在heap memory中保存一个字符串池.

使用String Pool主要的目的是用来节省存储空间,一般java程序中分布着大量的字符串变量.Java中String对象的内容是不能被修改的,因此,如果字符串的内容是一样,就没有必要再重新创建一个新字符串对象来表示,完全可以把已经存在的对象作为返回,这样可以有效剩下空间.这种方式需要在定义字符串的时候使用双引号,例如: String a = “alice”,如果使用String的构造方法String(String)这时JVM并不会将创建的对象放到String Pool当中,而是在heap中的其他位置分配空间去创建String对象.

可以看如下的小例子:

public class StringPool {    public static void main(String[] args) {        String a = "Alice"; //String Pool        String b = "Bob";  //String Pool        String a1 = "Alice"; //String Pool        String b1 = new String("Bob"); // heap but not in string pool        System.out.println("a == a1 ? " + (a == a1));        System.out.println("b == b1 ? " + (b == b1));    }}

执行的结果:

a == a1 ? true
b == b1 ? false

下面的图描述的不同创建方式所分配的内存空间的策略:

这里写图片描述

参考:
http://www.journaldev.com/797/what-is-java-string-pool

0 0