views:

107

answers:

2

What is the difference between String str = new String("SOME") and String str="SOME" Does these declarations gives performance variation.

+5  A: 

There is a small difference between both.

Second declaration assignates the reference associated to the constant SOMEto 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 SOMEare transformed into the same instance, which uses far less memory.

As a consequence, always prefer second syntax.

Riduidel
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
Interesting case of optimization, indeed, but I wouldn't go this path before having done some profiler checks (so would you, I guess).
Riduidel
+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