当我们使用new Keyword创建String对象时,String文字真的存储在String Constant Pool中(不使用intern()方法)

时间:2017-09-11 19:06:45

标签: java string

class Demo {
    public static void main(String[] args) {
        String a=new String("data");
        String b="data";
        if(a==b)                             // return false
            System.out.println("a and b has same reference address");
        else
            System.out.println("not same");

如果是新的关键字对象,"data"实际存储在String常量池中。如果存储,则变量a和b都具有相同的引用地址并返回true,如果不是那么false

String c=new String("data").intern();
String d="data";
if(c==d)
    System.out.println("true");
else
    System.out.println("false");
   }
}

并且如果我们使用intern()方法,两个变量都具有相同的引用地址,这意味着intern()方法用于在String Constant池中存储String。 我有点困惑,有人帮忙

1 个答案:

答案 0 :(得分:0)

真。

但是你的代码中使用的对象不止一个。

new每次调用时都会创建一个对象 - 这是Java语义,它无法解决(例如有人可能想要在新创建的对象上进行同步),而String文字(即只是引号中的字母)在第一次加载类时创建一个对象。

当你写一个方法时:

new String("test");

然后在加载类时,在池中创建一个字符串字符串,并且每次调用该行时都会创建另一个字符串(可能永远不会,也许很多次)。由于字符串是不可变的,第二个字符串可能与第一个字符串共享char缓冲区,所以通常它在使用的内存方面不是问题。