Java string intern and literal

后端 未结 5 555
太阳男子
太阳男子 2020-11-29 08:58

Are the below two pieces of code the same?

String foo = \"foo\";
String foo = new String(\"foo\").intern();
5条回答
  •  感情败类
    2020-11-29 09:25

    They have the same end result, but they are not the same (they'll produce different bytecode; the new String("foo").intern() version actually goes through those steps, producing a new string object, then interning it).

    Two relevant quotes from String#intern:

    When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

    All literal strings and string-valued constant expressions are interned.

    So the end result is the same: A variable referencing the interned string "foo".

提交回复
热议问题