Are the below two pieces of code the same?
String foo = "foo";
String foo = new String("foo").intern();
All literal strings and string-valued constant expressions are interned.
The method intern() creates an exact copy of a String object in the heap memory and stores it in the String constant pool. Note that, if another String with the same contents exists in the String constant pool, then a new object won't be created and the new reference will point to the other String.
String literal in Java is a set of characters that is created by enclosing them inside a pair of double quotes. In contrast, String Object is a Java is a set of characters that is created using the new() operator.
substring(1). intern(),the method of intern() will put the ""! test". substring(1)" to the pool of literal strings,so in this case,they are same reference objects,so will return true.
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 thisString
object as determined by theequals(Object)
method, then the string from the pool is returned. Otherwise, thisString
object is added to the pool and a reference to thisString
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".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With