What is the difference between String str = new String("SOME")
and String str="SOME"
Does these declarations gives performance variation.
views:
107answers:
2
+5
A:
There is a small difference between both.
Second declaration assignates the reference associated to the constant SOME
to the variable str
First declaration creates a new String having for value the value of the constant SOME
and assignates its reference to the variable str
.
In the first case, a second String has been created having the same value that SOME
which implies more inititialization time. As a consequence, you should avoid it. Furthermore, at compile time, all constants SOME
are transformed into the same instance, which uses far less memory.
As a consequence, always prefer second syntax.
Riduidel
2010-09-06 14:56:55
For the record, there are scenarios where `new String(String)` makes sense, like if you have a very large string and you're only interested in retaining a small substring. The `substring` methods only return a flyweight view of the original string, so using `new String(hugeString.substring(a, b))` forces a copy and lets the GC reclaim the contents of `hugeString` when it goes out of scope. They shouldn't have made it a constructor, though...
gustafc
2010-09-06 15:16:32
Interesting case of optimization, indeed, but I wouldn't go this path before having done some profiler checks (so would you, I guess).
Riduidel
2010-09-06 15:41:38
+11
A:
String str = new String("SOME")
always create a new object on the heap
String str="SOME"
uses the String pool
Try this small example:
String s1 = new String("hello");
String s2 = "hello";
String s3 = "hello";
System.err.println(s1 == s2);
System.err.println(s2 == s3);
To avoid creating unnecesary objects on the heap use the second form.
PeterMmm
2010-09-06 15:02:32