Java new String and new StringBuilder in heap behavior

后端 未结 2 1555
再見小時候
再見小時候 2020-12-11 14:08
  1. Does the String pool reside on the heap? If yes, are String literals eligible for garbage collection?

When using new String(\"abc\"), we kn

2条回答
  •  轮回少年
    2020-12-11 14:38

    First, yes, the string pool and the strings it contains are on the heap. Once a string literal is in the string pool it will never be removed from it. Thus, all string literals in the string pool are reachable until the program is terminated and thus not eligible for garbage collection. (Strings added to the string pool by other means might be eligible for garbage collection.)

    If we create a new String object by new String("abc"), then two things happen: first, because of the String literal "abc", a new String object with contents "abc" is created an added to the string pool (if it is not already there). Then, because of the new String(...) constructor, a new String object is created which is a copy of the string literal. This new string is not placed in the string pool. Thus, new String("abc") == "abc" does not hold.

    The code new StringBuilder("abc") does not do the same thing as new String("abc"), because it creates a StringBuilder object rather than a String. However, because of the String literal "abc", it does make sure that a String object with contents "abc" is in the string pool.

提交回复
热议问题