Tuesday 21 November 2017

java - What is the difference between "text" and new String("text")?

itemprop="text">


What is the difference
between these two following
statements?



String s =
"text";

String s = new
String("text");

class="post-text" itemprop="text">
class="normal">Answer




new
String("text");

explicitly creates a new and referentially
distinct instance of a String object; String s =
"text";
may reuse an instance from the string constant
pool
if one is
available.




You very
rarely
would ever want to use the new
String(anotherString)
constructor. From the
API:




href="http://java.sun.com/javase/6/docs/api/java/lang/String.html#String%28java.lang.String%29"
rel="noreferrer">String(String original) :
Initializes a newly created String object
so that it represents the same sequence of characters as the argument; in other words,
the newly created string is a copy of the argument string. Unless an explicit copy of
original is needed, use of this constructor is unnecessary since strings are immutable.




Related
questions






/>

What referential distinction
means



Examine the following
snippet:



 String s1 =
"foobar";
String s2 = "foobar";

System.out.println(s1
== s2); // true


s2 = new String("foobar");

System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); //
true


==
on two reference types is a reference identity comparison. Two objects that are
equals are not necessarily ==. It is
usually wrong to use == on reference types; most of the time
equals need to be used
instead.



Nonetheless, if for whatever reason you
need to create two equals but not ==
string, you can use the new
String(anotherString)
constructor. It needs to be said again, however, that
this is very peculiar, and is rarely the
intention.




References





Related
issues




No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...