what happens with new String(“”) in String Constant pool

前端 未结 5 1966
南方客
南方客 2021-01-24 07:05

if i create a string object as

String s=new String(\"Stackoverflow\");

will String object created only in heap, or it also makes a copy in Str

5条回答
  •  温柔的废话
    2021-01-24 08:04

    My answer is YES!

    Check the following code first:

    String s0 = "Stackoverflow";
    String s1 = new String("Stackoverflow");
    String s2 = s1.intern();
    
    System.out.println(s0 == s1);
    System.out.println(s1 == s2 );
    System.out.println(s0 == s2);
    
    //OUTPUT:
    false
    false
    true
    

    s0 hold a reference in the string pool, while new String(String original) will always construct a new instance. intern() method of String will return a reference in the string pool with the same value.

    Now go back to your question:

    Will String object created only in heap, or it also makes a copy in String constant pool?

    Since you already wrote a string constant "Stackoverflow" and pass it to your String constructor, so in my opinion, it has the same semantic as:

    String s0 = "Stackoverflow";
    String s1 = new String(s0);
    

    which means there will be a copy in String constant pool when the code is evaluated.

    But, if you construct the String object with following code:

    String s = new String("StackoverflowSOMETHINGELSE".toCharArray(),0,13);
    

    there won't be a copy of "Stackoverflow" in constant pool.

提交回复
热议问题